[英]x,y = getPos() vs. (x, y) = getPos()
考慮這個函數getPos(),它返回一個元組。 以下兩項任務有什么區別? 在某個地方,我看到了一個使用第一個任務的例子,但是當我嘗試第二個任務時,我很驚訝它也有效。 那么,真的有區別,或者Python只是發現左手部分應該是一個元組?
def getPos():
return (1, 1)
(x, y) = getPos() # First assignment
x, y = getPos() # Second assignment
是的,它被稱為元組解包 :
“元組解包需要左邊的變量列表與元組的長度具有相同的元素數。” - Guido Van Rossum
“當你在=的左側使用元組或列表時,Python將右側的對象與左側的目標配對,並從左到右分配它們。” - Lutz和Ascher
沒有區別:
>>> 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(左手邊)中使用元組進行元組解包:)
是的,它也在列表上工作
>>> x,y,z = range(3)
>>> print x, y, z
0 1 2
>>>
沒有區別。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.