1.7 变量

1.7.1 变量定义的要求及推荐的命名方法

有时候,我们会看到“字面量”这个词。字面量指字面本身的含义,比如100永远是数字100的意思,“hello world”永远是字符串本身的内容。编程时,使用这些字面量一方面不灵活,另一方面也没有实际的意义。用到的数字100是什么意思呢?是想表达质量100kg,还是汽车行驶的速度100km/h呢?如果用名称speed来代替100,我们就可以大概猜到这一定是某个速度。这里用到的speed就是变量。

在编写代码时,有些数据(如一个数字或一个字符串)需要反复用到,这个时候最好的办法是给其“起个名字”,这个名字就是变量。通过变量可以简化代码的输入,而且当数据需要改变时,只要把变量的值改一下就可以了,而不是费力地去查找替换。程序代码要用到10次数字100,如果只是简单地每次写上100,那么将来要把100改成200,必须修改10个位置;而使用变量,只要把变量的值修改一次就完成了。

变量名由一组字符构成,但并不是什么样的字符都是可用的。对于可以使用的字符,硬性的要求只有以下三点:

➢ 首字符必须是字母或下画线。

➢ 其余字符除字母、下画线外,还可以使用数字。

➢ 区分大小写。

不过,为变量起一个“好的名字”还是很重要的。例如,在程序的编写过程中要用到5个变量,这5个变量起名a1、a2、a3、a4、a5是完全合法的,但是这种名字用起来自己可能也会混淆,更不用说其他人看你的代码时会有多痛苦了。那么,什么样的名字才是一个好的名字呢?现将部分用法总结如下:

➢ 变量名通常全部使用小写字母,虽然大写字母也是合法字符。

➢ 使用有意义的名字。例如,保存数字的变量起名为number,保存用户名的变量起名为username。

➢ 如果用到多个单词,则单词间用下画线分隔,如python_string。

➢ 使用较为简短的名字,如python_string可以简写为py_str。

➢ 变量名使用名词。另外,函数也有名字,而函数通常要实现某一个功能、做某一件事,用“动词+名词”更为合适。例如,用变量phone保存电话号码,而使用update_phone作为函数名,就是实现更新电话号码的功能。

1.7.2 变量赋值

变量赋值使用一个等号来实现,而且变量赋值是自右向左进行的。Shell脚本中的变量赋值,等号两边不允许出现空格;而Python不做要求,通常的写法是等号两边都有空格。

把数字10的值,赋值给变量number的写法如下:

img

把10与20的和赋值给number的写法如下:

img

将number的值增加10的写法如下:

img

初学者有时会被上面的写法困扰,怎么也想不明白number为什么和number+10是相等的。注意,这不是比较,而是赋值,而且赋值运算是自右向左进行的。所以上面语句的正确理解是,先取出number的值,将其与数字10求和,得到的结果再赋值给变量number。

将number的值增加10,还可以写成如下格式:

img

这种写法与前一种写法是完全等价的。要注意,number必须是已存在的一个变量,否则将会出现NameError这样的错误。也就是说,变量在使用之前必须先赋值。

如果你有一些其他编程语言的基础,这时候一定会想到,变量自增、自减可以用++或--来实现。让我们试一下:

img

不要怀疑,Python的确不支持num++、num--这种操作。++num和--num没有报错,但是值没有变,因为它是“正正为正”“负负为正”的意思,这里的+和-只不过是正负号而已。Python崇尚的是简洁,不要有歧义,因为num++或++num这种自增方法初学时会有一定的学习难度,所以Python没有引入这种用法。

变量也支持链式赋值、多元赋值,如下所示:

img
img

img Python的思想,可以在交互解释器中通过import this来探知一二。

img

此短文是Tim Peters编写的《Python之禅》,它的主要思想用前三句话就可以代表了,简单来说就是:美胜丑、明胜暗、简胜繁。

1.7.3 变量类型

Python是动态类型的语言,它有多种数据类型,但是并不需要提前声明。Python会根据变量中保存的值来确定变量是何种类型。

img

将整数10赋值给a,变量a就变成了整数类型;而再次将字符串“hello”赋值给a,变量a又自动变成了字符串类型。通过内建函数type()可以查看数据的类型。

一般来说,同种类型的数据才能做相应的运算,不同类型的数据进行运算则会出现错误:

img