编程语言最强大的功能之一是操纵变量(variable)。变量是一个需要熟知的概念,在Python中的变量很好理解,就是代表某个值的名字。
把一个值赋给一个名字,这个值会存储在内存中。在大多数语言中,把这种操作称为“给变量赋值”或“把值存储在变量中”。
在Python中,变量指向各种类型值的名字,以后再用到这个值时直接引用名字即可,不用再写具体的值。
变量的使用环境非常宽松,没有明显的变量声明,而且类型不是必须固定的。可以把一个整数赋值给变量,也可以把字符串、列表或字典赋给变量。
在Python中,赋值语句用等号(=)表示,可以把任意数据类型赋值给变量。比如,要定义一个名为xiaohong的变量,对应值为XiaoHong,可按下述方式操作:
>>> xiaohong = 'XiaoHong' >>>
其中,xiaohong是我们创建的变量,=是赋值语句,XiaoHong是变量值,变量值需要用单引号或双引号标记。整句话的意思是:创建一个名为xiaohong的变量并将变量赋值为XiaoHong(注意这里的大小写)。
在Python中,对于变量,不能像数据类型那样,输入数值就立马能看到结果。对于变量,需要使用输出函数。print()是输出函数,上面的示例中没有使用输出函数,屏幕上当然不会有输出内容。尝试如下:
>>> print(xiaohong) XiaoHong
成功打印出了结果。为什么输入的是print(xiaohong),结果却输出XiaoHong呢?这就是变量的好处,可以只定义一个变量名,比如名为xiaohong的变量,把一个实际的值赋给这个变量,比如XiaoHong,计算机中会开辟出一块内存空间存放XiaoHong这个值,当让计算机输出xiaohong时,在计算机中,xiaohong这个变量实际上指向的是值为XiaoHong的内存空间。
在使用变量前需要对其赋值,没有值的变量是没有意义的,编译器也不会编译通过。
例如,定义一个变量abc,不赋任何值,输入及结果如下:
输出结果提示我们名称错误,名称abc没有定义。
同一个变量可以反复赋值,而且可以是不同类型的变量,输入如下:
这里提到变量类型的概念,在前面提到Python 3.x中有6种标准对象类型,那么对于定义的一个变量,怎么知道它的类型是什么呢?
在Python中,提供了一个内置的type函数,可以帮助我们识别一个变量的类型,例如:
>>> type('Hello,world!') <class 'str'>
这里的<class 'str'>指的是Hello这个变量值的类型是str(字符串)类型的。
按照同样的方式在交互模式下输入如下内容:
只要是用双引号或单引号括起来的值都属于字符串。再在交互模式下输入如下内容:
注意,不要把赋值语句的等号等同于数学中的等号。例如:
a = 100 a = a + 200
在编程语言中,a=a + 200的计算规则是:赋值语句先计算右侧的表达式a + 200,得到结果300,再将结果值300赋给变量a。由于a之前的值是100,重新赋值后,a的值变成300。通过交互模式做验证,输入如下:
理解变量在计算机内存中的表示也非常重要。在交互模式下输入:
>>> a = '123'
这时,Python解释器做了两件事情:
(1)在内存中开辟一块存储空间,在这个存储空间中存放'123'这三个字母对应的字符串。
(2)在内存中创建一个名为a的变量,并指向'123'字符串对应的内存空间。
也可以把一个变量a赋值给另一个变量b,这个操作实际上是把变量b指向变量a所指向的数据,例如:
最后一行打印出变量b的内容到底是'123'还是'456'呢?从数学逻辑推理,得到的结果应该是b和a相同,都是'456',实际上在交互模式下打印出的b值是'123'。
这里我们不急于问为什么,先一行一行执行代码,看看到底是怎么回事。
首先执行a='123',解释器在内存中开辟一块空间,存放字符串'123',并创建变量a,把a指向'123',如图1-4所示。
接着执行b=a,解释器创建了变量b,并把b也指向字符串'123',如图1-5所示,此时a和b都指向了字符串'123'。
再接着执行a = '456',解释器在内存中继续开辟一块空间,开辟的新空间用于存放字符串'456',a的指向更改为字符串'456',b的指向不变,如图1-6所示。
图1-4 a指向'123'
图1-5 a、b指向'123'
图1-6 a指向'456',b不变
最后执行print(b),输出变量b的结果。由图1-6可见,变量b指向的是字符串'123',所以print(b)得到的结果是123。
在程序编写时,选择有意义的名称为变量名是一个非常好的习惯,不仅便于以此标记变量的用途,还可以在有多个变量时区分各个变量。就像我们每个人都会取一个不那么普通的名字,以便别人记忆或识别。
在Python中,变量名是由数字或字符组成的任意长度的字符串,并且必须以字母开头。使用大写字母是合法的,在命名变量时,为避免变量使用过程中出现一些拼写上的低级错误,建议变量名中的字母都用小写,因为Python是严格区分大小写的。
举个例子,若用Name和name作为变量名,那么Name和name就是两个不同的变量:
在Python中,一般用下画线“_”连接多个词组。在交互模式下输入Python标准变量的命名方式如下:
>>> happy_study = 'stay hungry stay foolish' >>> print(happy_study) stay hungry stay foolish
在Python的命名规则中,变量名不能以数字开头,给变量取名时,若变量的命名不符合Python的命名规则,解释器就会显示语法错误。先在交互模式下输入:
再在交互模式下输入:
该示例提示语法错误,错误信息为不能做指定操作,错误原因是变量名xiaoming@me中包含了一个非法字符“@”。
在Python中不允许使用内部的关键字作为变量名,例如:
>>> and='use and as variable name' SyntaxError: invalid syntax
and是Python内部的一个关键字,因此会出现错误。其实,在交互模式下输入and时,and变量的字体会变成淡红色,而正常变量的字体是黑色的。在交互模式下定义变量时,系统会自动校验变量是否是Python的关键字。
关键字是一门编程语言中预先保留的标识符,每个关键字都有特殊的含义。编程语言众多,但是每种语言都有相应的关键字,Python也不例外。
在Python中,自带了一个keyword模块(模块的概念在后续章节会介绍),用于检测关键字。可以通过Python的交互模式做如下操作获取关键字列表:
由上面的输出结果可以看到,在Python 3.9中共有35个关键字,这些关键字都不能作为变量名来使用。整理成更直观的形式如下:
常量是不能改变现有值的量,可以直接拿来使用,常量对应的值是固定的,不会发生变更。比如常用的数学常数π就是一个常量。在Python中,通常一般用全部大写的变量名表示常量。
Python中有两个比较常见的常量,即PI和E。