赋值语句创建对象引用
赋值语句总是创建对象的引用,而不是复制对象,因此,Python变量更像是指针,而不是数据存储区域;
变量在首次赋值时会被创建
Python会在首次将值(即对象引用)赋给变量时创建其变量名,所以你不必提前预声明变量名。一旦赋值后,每当这个变量出现在表达式中时,就会替换成其引用的值;
变量在引用前必须先赋值
某些操作会隐式地进行赋值
模块导入、函数和类的定义、for循环变量,以及函数参数等全都是隐式赋值运算。
赋值语句形式
元组及列表解包赋值
当在“=”左侧编写元组或列表时,Python会按照位置把右侧的对象和左侧的目标从左至右相配对;x,y = 1,2
或(x,y) = (1,2)
或[x,y] = [1,2]
序列赋值
任何值的序列都可以赋值给任何名称的序列,Python会按照位置一次性完成所有的赋值(一一对应);a,b,c = '123'
拓展的序列解包>>> a,*b = 'yumoe'
>>> a
'y'
>>> b
['u', 'm', 'o', 'e']
带星号的名称有可能值匹配到单个的项,但总会向其赋值一个列表
剩下的内容不能配带星号的名称,那么它将赋值一个空列表,不论该名称出现在哪里;
使用了多个带星号的名称或是名称数目少于值序列长度,同时没有带星号的名称,亦或是带星号的名称自身没有被编写到一个列表中,都会引发错误。
多目标赋值a = b = 'c'
只要赋值的对象是不可变的,即使有一个以上的名称引用该对象也不会互相影响;
增量赋值
是一种将表达式和赋值语句结合到一起的简写形式,如果操作的主体是可变的并且支持这一操作,那么增量赋值会选择原位置更新而不是复制对象,从而加快运行速度,在Python中,每一种二元表达式运算符都有对应的增量赋值语句。a += 1
“+=”对于列表而言是原位置修改,因此这与总是产生新对象的“+”拼接并不完全相同。