考虑这个函数getPos(),它返回一个元组。以下两项任务有什么区别?在某个地方,我看到了一个使用第一个任务的例子,但是当我尝试第二个任务时,我很惊讶它也有效。那么,真的有区别吗,或者Python只是发现左手部分应该是一个元组?
def getPos():
return (1, 1)
(x, y) = getPos() # First assignment
x, y = getPos() # Second assignment
答案 0 :(得分:8)
答案 1 :(得分:5)
是的,它被称为tuple unpacking:
“元组解包需要左边的变量列表与元组的长度具有相同的元素数。” - Guido Van Rossum
“当你在=的左侧使用元组或列表时,Python将右侧的对象与左侧的目标配对,并从左到右分配它们。” - Lutz和Ascher
答案 2 :(得分:4)
没有区别:
>>> import dis
>>> dis.dis(compile("a,b = expr()", "", "single"))
1 0 LOAD_NAME 0 (expr)
3 CALL_FUNCTION 0
6 UNPACK_SEQUENCE 2
9 STORE_NAME 1 (a)
12 STORE_NAME 2 (b)
15 LOAD_CONST 0 (None)
18 RETURN_VALUE
>>> dis.dis(compile("(a,b) = expr()", "", "single"))
1 0 LOAD_NAME 0 (expr)
3 CALL_FUNCTION 0
6 UNPACK_SEQUENCE 2
9 STORE_NAME 1 (a)
12 STORE_NAME 2 (b)
15 LOAD_CONST 0 (None)
18 RETURN_VALUE
a, b
和(a, b)
都指定了一个元组,你需要在LHS(左手边)中使用元组进行元组解包:)
答案 3 :(得分:3)
是的,它也适用于列表
>>> x,y,z = range(3)
>>> print x, y, z
0 1 2
>>>
答案 4 :(得分:1)
没有区别。