python赋值语句及序列解包增强赋值
1.1 python赋值语句
python赋值语句把对象赋给一个变量,即"变量=对象"。
变量为变量名或对象元素。对象为生成对象的表达式。
序号
描述
1
赋值语句建立对象引用。左边变量存储右边对象的引用,而不是复制对象。
2
首次赋值创建变量名。使用变量时,对象引用的值替换变量。
3
变量名使用前需赋值。
4
隐性赋值。包括:模块导入、函数定义、类定义、for循环变量、函数参数。
1.2 python赋值语句形式
python支持多种赋值语句形式。
序号
语句
描述
1
s=’梯阅线条’
单变量赋值
2
a,b=1,2
多变量赋不同值,变量和值一一对应,变量和值数量相同
3
a,b,c,d=’梯阅线条’ L=[1,2,3,4] a,b,c,d=L
序列按位置赋值,变量和值一一对应,变量和值数量相同
4
a,*b=’梯阅线条’
序列解包,按位置赋值,*b赋值剩下全部值的列表
5
a=b=’梯阅线条’
多变量赋相同值
6
s+=9555
增强赋值,等效于s=s+9555,二元表达式都支持增强赋值 1.3 python序列赋值
python序列赋值,类似a,b,c=1,2,3,左边变量和右边值的数量相同,一个变量对应一个值。
并且,左边和右边都是元组,只是省略了括号。元组在有歧义的时候要加上括号。
示例 >>> s="梯阅线条" >>> a,b,c,d=s >>> a,b,c,d ("梯", "阅", "线", "条") >>> (a,b),c=s[0:2],s[2:] >>> a,b,c ("梯", "阅", "线条") >>> a,b,c=range(3) >>> a,b,c (0, 1, 2) # for 循环,序列赋值 >>> for (a,b,c) in [(1,2,3),(4,5,6)]: print(a,b,c) 1 2 3 4 5 6 >>> for ((a,b),c) in [((1,2),3),((4,5),6)]: print((a,b),c) (1, 2) 3 (4, 5) 6 # while 循环,序列赋值 >>> L=[1,2,3,4] >>> while L: head,L=L[0],L[1:] print(head,L) 1 [2, 3, 4] 2 [3, 4] 3 [4] 4 []1.4 python序列解包1.4.1 *变量
描述
python序列解包,就是把剩下的值组成列表,赋给带星号(*)的变量。
示例 >>> s="1234" >>> a,b=s[0],s[1:] >>> a,b ("1", "234") >>> a,*b=s >>> a,b ("1", ["2", "3", "4"]) >>> L=list(s) >>> L ["1", "2", "3", "4"] >>> a,*b=L >>> a,b ("1", ["2", "3", "4"])1.4.2 *变量在不同位置
描述
python序列解包,带星号(*)的变量可以出现在任何位置。
示例 >>> L=list(range(1,5)) >>> L [1, 2, 3, 4] >>> *a,b,c=L >>> a,b,c ([1, 2], 3, 4) >>> a,*b,c=L >>> a,b,c (1, [2, 3], 4) >>> a,b,*c=L >>> a,b,c (1, 2, [3, 4])1.4.3 *变量边界值
描述
python序列解包,带星号(*)的变量,只有1个剩余值时,返回单元素列表,没有剩余值时,返回空列表,
序号
*变量边界
描述
1
1个剩余值
返回单元素列表
2
没有剩余值
返回空列表
3
没有*变量,且变量和值数量不等
ValueError
4
1个*变量,且只有1个变量,要带逗号,因为是元组
否则SyntaxError
5
同时存在多个*变量
SyntaxError
示例 >>> L=list(range(1,5)) >>> L [1, 2, 3, 4] >>> a,b,c,d=L >>> a,b,c,d (1, 2, 3, 4) # *变量存1个值,单元素列表 >>> a,b,c,*d=L >>> a,b,c,d (1, 2, 3, [4]) # *变量没剩余值,空列表 >>> a,b,c,d,*e=L >>> a,b,c,d,e (1, 2, 3, 4, []) # 没有*变量,且变量和值数量不等 >>> a,b=L Traceback (most recent call last): File "", line 1, in a,b=L ValueError: too many values to unpack (expected 2) # 1个*变量,且只有1个变量 >>> *a=L SyntaxError: starred assignment target must be in a list or tuple >>> *a,=L >>> a [1, 2, 3, 4] # 多个*变量 >>> a,b,*c,*d=L SyntaxError: two starred expressions in assignment1.4.4 序列解包用于循环
描述
python序列解包,可用于for和while循环,减少书写。
示例 # 序列解包,用于for循环 >>> L=[list(range(i,i+4)) for i in range(1,13,4)] >>> L [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] >>> for (a,b,*c) in L: print(a,b,c) 1 2 [3, 4] 5 6 [7, 8] 9 10 [11, 12] # 序列解包,用于while循环 >>> L=[1,2,3,4] >>> L [1, 2, 3, 4] >>> while L: head,*L=L print(head,L) 1 [2, 3, 4] 2 [3, 4] 3 [4] 4 []1.5 python多变量赋相同值
描述
python多变量赋相同值,就是不同变量赋给相同的值,相当于共享引用。
示例 >>> a=b=c="tyxt" >>> a,b,c ("tyxt", "tyxt", "tyxt") #可变共享引用,修改会相互影响 >>> a=b=c=[] >>> a,b,c ([], [], []) >>> c.append(91) >>> a,b,c ([91], [91], [91])1.6 增强赋值语句
描述
python的二元表达式和赋值语句结合,组成增强赋值语句。
序号
增强赋值语句
等效赋值语句
1
X+=Y
X=X+Y
2
X-=Y
X=X-Y
3
X*=Y
X=X*Y
4
X/=Y
X=X/Y
5
X%=Y
X=X%Y
6
X<<=Y
X=X< X>>Y
X=X>>Y
8
X&=Y
X=X&Y
9
X|=Y
X=X|Y
10
X^=Y
X=X^Y
python增强赋值语句优点
序号
优点
描述
1
书写少
左边只写1次
2
执行快
左边只执行1次,等效赋值语句,需执行2次
3
自动选择执行快的快方式
可变对象自动选择原处修改
python增强赋值语句,用于可变对象的共享引用时,可变对象会原处修改。
示例 >>> L1=[1,2] >>> L2=[1,2] >>> L1,L2 ([1, 2], [1, 2]) # 普通赋值 >>> L1=L1+[3] >>> L1 [1, 2, 3] # 增强赋值 >>> L2+=[3] >>> L2 [1, 2, 3] >>> a1=1;a2=1 >>> a1,a2 (1, 1) >>> a1+=1 >>> a1 2 >>> a2=a2+1 >>> a2 2 # L1=L1+X ,普通赋值生成新对象 >>> L1=[1,2] >>> L2=L1 >>> L1,L2 ([1, 2], [1, 2]) >>> L1=L1+[3,4] >>> L1,L2 ([1, 2, 3, 4], [1, 2]) # L1+=X,增强赋值原地修改 >>> L1=[1,2] >>> L2=L1 >>> L1+=[3,4] >>> L1,L2 ([1, 2, 3, 4], [1, 2, 3, 4])2 END
版权声明© :
本文首发 微信公众号:梯阅线条 ,
原创不易,转载请注明出处。
更多内容参考python知识分享或软件测试开发目录。