
2.4 变量和赋值语句
计算机程序通常用于处理各种类型的数据(即对象),不同的数据属于不同的数据类型,支持不同的运算操作。
计算机程序处理的数据必须放入内存。机器语言和汇编语言直接通过内存地址访问这些数据,而高级语言则通过内存单元命名(即变量)来访问这些数据。
在Python 3中一切皆为对象。对象是某个类(类型)的实例,对象由唯一的id标识。对象可以通过标识符来引用,对象引用即指向具体对象实例的标识符,也称之为“变量”。
2.4.1 变量的声明和赋值
变量的声明和赋值用于把一个变量绑定到某个对象,其语法格式如下。

最简单的表达式是字面量,Python基于字面量的值创建一个对象,并绑定到变量;对于复杂的表达式,Python先求值表达式,然后返回表达式结果对象,并绑定到变量。
Python变量被访问之前必须初始化,即赋值(绑定到某个对象),否则会报错。
【例2.15】 变量的声明和赋值示例。

2.4.2 链式赋值语句
链式赋值(chained assignment)的语句形式如下:

等价于:

链式赋值用于为多个变量赋同一个值。
【例2.16】 链式赋值语句示例。

2.4.3 复合赋值语句
复合赋值运算符不仅可以简化程序代码,使程序精练,而且可以提高程序的效率。Python中的复合赋值运算符如表2-3所示。
表2-3 复合赋值运算符

【例2.17】 复合赋值示例。

2.4.4 删除变量
用户可以使用del语句删除不再使用的变量。
【例2.18】 删除变量示例。

2.4.5 序列解包赋值
Python支持将序列数据类型(参见第5章)解包为对应相同个数的变量。
【例2.19】 序列解包示例。

注意:变量的个数必须与序列的元素个数一致,否则会产生错误。例如,对于语句“x,y=(1,2,3)”,由于右侧的元组序列包含3个元素,但是左侧只有两个变量,所以会产生错误。
如果只需要解包部分值,则可以采用特殊变量“_”。例如:

【例2.20】 使用序列解包实现变量交换。

说明:在Python语言中,使用“a,b=b,a”的语句方式可以“优雅地”实现两个变量的值的交换。
2.4.6 常量
Python语言不支持常量,即没有语法规则限制改变一个常量的值。Python语言使用约定,声明在程序运行过程中不会改变的变量为常量,通常使用全大写字母(可以使用下画线增加可阅读性)表示常量名。
【例2.21】 常量示例。
