p = (4,6,8)
x,y,z = p
print('x is',x)
print('y is',y)
print('z is',z)
屏幕输出的结果是:
x is 4
y is 6
z is 8
需要注意的是,如果元素的数量不匹配,将得到一个错误的提示:
p = (4,6,8)
y,z = p
print('y is',y)
print('z is',z)
错误提示:
Traceback (most recent call last):
File "D:/home/temp/temp1.py", line 2, in <module>
y,z = p
ValueError: too many values to unpack (expected 2)
1.2 分解操作丢弃特定的元素值 实际上不仅仅是元组或者列表,只要对向恰好是可迭代的,那么久可以执行分解操作,包括字符串,文件、迭代器和生成器。
p = 'nihao'
y,z,_,_,_, = p
print('y is',y)
print('z is',z)
屏幕输出:
y is n
z is i
事实上,从这个例子中我们也可以看出,如果是想丢弃某一些值,留下我们需要的特定值,我们可以才用一些用不到的变量名,例如_ 。(这不是最好的办法,下面会介绍一种更好的办法)
p = 'nihao'
y,*q,z = p
print('y is',y)
print('q is',q)
print('z is',z)
屏幕输出:
y is n
q is ['i', 'h', 'a']
z is o
从例子可以看出,*修饰表达式的时候python处理的办法是将不确定个数的部分用一个列表来表示。很显然需要注意的问题是,这种方法不能再两端都用这种方法:
p = 'nihao'
*y,q,*z = p
print('y is',y)
print('q is',q)
print('z is',z)
屏幕输出:
File "D:/home/temp/temp1.py", line 2
*y,q,*z = p
^
SyntaxError: two starred expressions in assignment
其实很好理解,python不知道那一部分是确定的,所以无法处理。 2.2 多个‘*表达式’连用 有时候需要将多个‘*表达式’连用,以达到更加好的效果。
p = [20,88,'nihao',[7,8,2012]]
*y,(*_,z) = p
print('y is',y)
print('z is',z)
屏幕输出:
y is [20, 88, 'nihao']
z is 2012
这样就能精确的得到我们想要的元素。从中我们可以发现,一般这样用的场合是需要分解得到的元组在对象的一个还可以在分的对象中(子对象)。
元素分解是在编程中经常遇到的问题,采用这些方法可以是我们的代码精简,可阅读性强。