变量
给值起的名字,之后可以用这个名字取出或改指另一个值。
它是什么
变量 是贴在值上面的名字。程序要反复提起一次观测、一个系数、一个是否有解的判断,不可能每次把字面量重新抄一遍。起一个名字,就能取出当前的值,也可以让这个名字改去指向新的值。
temperature = 36.7
label = "对照组"
ready = True左边是名字,右边是值。这里的等号读成「绑定」或「放进去」,不是数学课上的「两边恒等」。数学里的等号断言一种关系;程序里的单等号执行一次写入。
名字从哪来
英文 variable 来自数学里的「可变量」。代数用字母代表可以取不同值的对象:韦达系统地用字母写方程,笛卡尔约定用 、、 表示未知。编程把这个习惯搬进机器——标签暂时还叫原来的名字,它指向的对象可以更换。
Python 里,名字常用小写加下划线,例如 student_name。这是社区约定,不是语法强迫,但一致的写法降低了误读。不能以数字开头,不能与 if、for 等关键词抢名字,并且区分大小写。
它怎么工作
赋值使用一个等号。要先赋值,再使用;尚未绑定的名字直接拿来运算,会变成 NameError,这是一种 异常。
count = 11
count = count + 1先取出旧的 11,加上 1,再把名字绑到新值上。同一个名字可以先后指向不同 类型 的值:先指向整数,再指向字符串,语言允许,但换完以后能做的运算也跟着变。名字本身不固定类型;类型跟的是值。
函数 的参数也是一种名字,只在函数执行的那一阵存在,和外面的同名变量不必指向同一个对象。
生活里在哪里
座位牌上的位子还在,坐的人可以换;成绩单上的科目名不变,分数每次都会变;实验记录里「室温」这个栏目固定,读数随日期而变。这些都是「稳定的名字,可变的内容」。对话式编程时,若说不清一个名字代表观测、估计还是编号,生成出的程序很容易把它们加在一起——那不是算术错了,而是世界被认错了。见 对话式编程。
和相近概念的差别
变量是名字。数据类型 是这个名字当前指向的值属于哪一种。一个等号是写入;两个等号 == 才是比较相不相等,见 运算符。
对象 是名字所指向的那个东西。赋值 b = a 往往让两个名字指向同一个对象,而不是悄悄复制一份。把名字和对象当成同一个词,会在「改了一处、另一处也变」时感到意外。
常见误会
误会 1:把 = 当成「等于」。
比较相等要写 ==。在条件里误用单等号,有的位置会直接报错,有的位置会完成一次赋值,逻辑随即偏离问题。
误会 2:换了内容,旧值一定还在某个角落。
名字改指新值以后,旧值如果没有任何名字再指向它,就不会再被这条名字找到。
误会 3:print(score) 会把「score」这几个字母印出来。
它打印的是名字当前指向的值。要打印文字本身,得写成字符串。
想知道更多
- 书:布鲁克希尔《计算机科学概论》
- 书:查尔斯·佩措尔德《编码:隐匿在计算机软硬件背后的语言》
- 书:艾伦·唐尼《像计算机科学家一样思考Python(第2版)》
- 书:埃里克·马瑟斯《Python编程:从入门到实践(第3版)》
未登录时不会保存学习进度