a=10 等号右边给左边赋值
一 序列赋值
a,b=1,2
[a,b]=[1,2]
# 本质是(1,2) 给(a,b) 每个元素的位置一一对应
1. 不能多给值
2. 也不能少给
====================
高级形式: s='hehe'
利用切片
(a,b),c=s[:2],s[2:] # h e he
a,b,c=range(3)
3. 非序列不能参与序列赋值
(a,b)=100 # 报错
a=(100,200) # 一般赋值
(a,b),c=range(3) # 无论range中参数为何值都不成立
序列分割问题:(切片)
l=[1,2,3,4]
while l:
front,l=l[0],l[1:]
print(front,l)
1[2, 3, 4]
2 [3, 4]
3 [4]
4 []
二 扩展的序列解包
a,*b=1,2,3
1. *b可以接受多个值(可以不给值)
2. *b打包成列表
3. *b优先级较低,优先分配其他值
4. 如发生命名冲突,则会使用较靠后的变量名
a,b,*b=1,2,3
print(a,b)
5. 不可以同时出现多个*
序列分割问题
l=[1,2,3,4]
while l:
font,*l=l
print(font,l)
1 [2, 3, 4]
2 [3, 4]
3 [4]
4 []
三 多目标赋值语句
a=b=c=10
被解析为:
c=10 b=c a=b
四 增强赋值语句
+= -= *= /= //= %= **= >>= <<= &= ^= |=
a+=1 相当于 a=a+1 两者的实现方式完全不一样
五 增强赋值运算的优点
1. 减少程序员输入的代码量
2. 减少代码的冗余
3. 运算效率高于普通运算
弊端: 增强赋值运算是线程不安全的