Skip to content
📌知识点小结
  • 变量是给数据起的“名字/标签”,方便存取和复用。
  • 用赋值号 = 把数据存进变量:name = "eason",读作“把右边放进左边”。
  • 变量的值可以被读取、参与运算,也可以被重新赋值覆盖。
  • 变量名要有意义、区分大小写,不能用关键字、不能以数字开头。
  • 安全脚本里常用变量存目标 URL、端口、返回结果。
✅自测一下

0.25 变量:给数据起名字 ​

第〇篇【零基础预科】免费。变量是编程里第一个、也是用得最多的概念。

一、为什么需要变量 ​

没有变量,程序里全是写死的值,没法灵活处理。变量就像贴在数据上的标签,或一个"有名字的盒子":你把数据放进去,之后用名字就能取。

说个没有变量会多痛苦的场景。假设你要写一个脚本,对 http://192.168.1.10:8080 这个目标发 50 次请求。如果不用变量,这个地址就得在代码里写 50 遍——哪天目标换成 192.168.1.11,你得一处处改,漏一个就出错。有了变量,你在开头写一句 target = "http://192.168.1.10:8080",后面 50 处都用 target 这个名字引用;换目标只改第一行,其余纹丝不动。这就是变量最实在的价值:把可能变的东西集中到一处。

你可能会问:变量和数学里的 x、y 是一回事吗? 名字像,但含义不一样。数学里 x = 5 是一个"等式",表示 x 永远等于 5;编程里 x = 5 是一个"动作",意思是"把 5 这个值塞进名叫 x 的盒子"。过一行你写 x = 10,盒子里的东西就换成 10 了,x 不再是 5。所以在代码里看到 x = x + 1 不要困惑——它不是数学等式,而是"把 x 盒子里的值取出来加 1,再塞回去"。

二、赋值:用 = 存数据 ​

python
target = "http://127.0.0.1:8080"
port = 8080
is_vuln = False

读法:把 = 右边的值,放进左边这个变量名。 注意和数学里的等号区分——它不是"判断相等",而是"赋值"。

你可能会问:为什么要用变量名,直接写数字不行吗? 能写,但脚本一长就乱。比如你在脚本里写了 10 个 8080,跑了一周后想起"当时端口写的是 8080 还是 8000 来着",只能一个个翻。用了变量,开头一处 port = 8080,全文统一,改也只改一处。变量名还有"注释"作用——看到 port 你就知道这是端口,看到 target_url 就知道这是目标地址,不用再去猜那个裸数字代表什么。

注意赋值方向永远是"右 → 左"。target = "http://..." 是把右边那串文字塞进左边的变量名;你要是写成 "http://..." = target,Python 会直接报错 SyntaxError,因为它不允许把一个固定值当成"接收方"。刚开始写反很正常,看到这种报错就知道方向搞反了。

三、读取与重新赋值 ​

python
count = 1
print(count)      # 1
count = 5         # 重新赋值,覆盖旧值
print(count)      # 5
count = count + 1 # 取出旧值加1,再存回去
print(count)      # 6

变量可以参与运算、传给函数、打印出来。

这里面最容易把新手绕晕的是 count = count + 1。数学上这是个无解的等式,但编程里它的执行顺序是:先算右边——把 count 当前的值取出来加 1,得到一个新数;再把这个新数赋值回左边的 count。原来的值被覆盖掉了。如果你刚学编程,看到 count = count + 1 觉得别扭,可以在脑子里把它读成"count 加 1 再存回 count"。Python 里还有个简写 count += 1,意思完全一样,后面你会大量见到。

你可能会问:那旧值怎么办了? 被覆盖了,就找不回来了。这也是为什么"先存好中间结果"很重要——如果你在覆盖之前没把旧值存到另一个变量里,它就永久消失了。写脚本时常见的 bug 就是"这个变量被我改来改去,最后不知道现在是几",解决办法要么多打印几步看过程,要么用新变量名保存中间状态。

四、命名规则与好习惯 ​

规则(违反会报错):

  • 由字母、数字、下划线组成,不能以数字开头;
  • 不能是 Python 关键字(if、for、class、return 等);
  • 区分大小写:Name 和 name 是两个变量。

好习惯:

  • 见名知意:用 target_url 而不是 a;
  • 多个单词用下划线连接(is_vulnerable);
  • 不要用 l、O 这种易和数字混淆的单字符。

说一个新手常踩的坑:变量名是区分大小写的。你前面写了 target = "http://...",后面不小心写成 Target = "http://...",Python 会当成两个完全不同的变量。用 target 的地方取到的还是旧值(或直接报错 NameError: name 'target' is not defined),而 Target 是一个全新的、空的变量。这种 bug 不报错或报错信息很绕,排查起来特别费时间。约定俗成的做法是:变量名全小写、多个单词用下划线隔开(target_url、is_vuln),不要一会儿大写一会儿驼峰,保持一致就少踩坑。

五、安全脚本里的变量 ​

python
target_url = "http://127.0.0.1:8080"
payload = "/examples/?"
timeout = 5

response_status = 200
is_vulnerable = False

把目标、超时、结果都放进变量,脚本就清晰、好改:换目标只改一处。

你以后写探测脚本时,开头一定会看到这种"配置区":目标 URL、端口列表、超时时间、payload 路径全堆在一起。这不是随便放的——把这些"可能会变的东西"集中在开头,跑脚本时只改这几行就行。比如今天打 127.0.0.1:8080,明天换成 192.168.1.20:9000,你只动 target_url 和 port 两个变量,下面几十行逻辑一个字都不用碰。如果把 IP 硬编码在每一行里,换个目标就得全文搜替换,又慢又容易漏。

你可能会问:变量名能写多长? 没有硬性上限,但太长也累。原则是"看名字就知道装的是什么",不用把整个句子都塞进去。target_url 够了,不用写 the_target_website_url_i_want_to_scan。命名是给人读的,不是给电脑读的——电脑不关心你叫它什么,它只按你赋的值来。

六、本篇小结 ​

  • 变量是数据的名字/标签,用 = 把右边值赋给左边名。
  • 值可读取、运算、重新赋值覆盖。
  • 命名:字母数字下划线、不数字开头、非关键字、区分大小写,且要见名知意。
  • 安全脚本常用变量存目标、端口、结果。

说到底,变量就是给数据起个代号。你不用记内存地址、不用关心数据实际存在哪块硬盘上,只管用名字引用就行——操作系统和解释器在背后帮你做了这些脏活。你要养成的习惯是:凡是"在多个地方用到、或者以后可能要改"的值,都先存成变量,别在代码里到处写裸值。

下一篇 0.26 讲放进变量里的数据都有哪些"类型"。