第11章
序列赋值
>>> nudge = 1
>>> wink = 2
>>> a,b = nudge,wink
>>> a,b
(1, 2)
>>> [a,b,c]=(1,2,3)
>>> a,c
(1, 3)
虽然可以在=
符号两侧混合相匹配的序列类型,右边元素的数目还是要跟左边的变量的数目相同。
>>> a,b,c=[235,'loi','wang']
>>> d = a,b,c
>>> d[:2],d[2:]
((235, 'loi'), ('wang',))
>>> ((a,b),c)=('sp','am')
>>> a,b,c
('s', 'p', 'am')
------------------
>>> red,green,blue=range(3)
>>> red,green,blue
(0, 1, 2)
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 []
扩展序列解包
>>> seq=[1,2,3,4] #对于任何序列类型都一样
>>> a,*b = seq
>>> a,b
(1, [2, 3, 4])
>>> *a,b = seq
>>> a,b
([1, 2, 3], 4)
>>> a,*b,c = seq
>>> a,b,c
(1, [2, 3], 4)
一个序列解包赋值总是返回多个匹配项的一个列表,而分片把相同类型的一个序列作为分片的对象返回。
#扩展序列解包赋值
>>> a,*b = 'spam'
>>> a,b
('s', ['p', 'a', 'm'])
>>> a,*b,c = 'spam'
>>> a,b,c
('s', ['p', 'a'], 'm') #看这行
--------------------------
#切片赋值
>>> s = 'spam'
>>> s[0],s[1:]
('s', 'pam')
>>> s[0],s[1:3],s[3]
('s', 'pa', 'm') #看这行
边界情况
带星号的名称可能匹配单个项
>>> seq = [1,2,3,4]
>>> a,b,c,*d = seq
>>> a,b,c,d
(1, 2, 3, [4])
>>> print(a,b,c,d) #为什么直接返回值是元组,打印是整形
1 2 3 [4]
应用于for循环
等学for循环迭代工具看p301