簡體   English   中英

x,y = getPos()vs.(x,y)= getPos()

[英]x,y = getPos() vs. (x, y) = getPos()

考慮這個函數getPos(),它返回一個元組。 以下兩項任務有什么區別? 在某個地方,我看到了一個使用第一個任務的例子,但是當我嘗試第二個任務時,我很驚訝它也有效。 那么,真的有區別,或者Python只是發現左手部分應該是一個元組?

def getPos():
  return (1, 1)

(x, y) = getPos() # First assignment
x, y   = getPos() # Second assignment

閱讀有關元組的信息

元組由逗號分隔的多個值組成(...)

因此,括號不會使元組成為元組。 逗號做了。

只有在具有奇怪的嵌套結構時才需要括號:

x, (y, (w, z)), r

是的,它被稱為元組解包

“元組解包需要左邊的變量列表與元組的長度具有相同的元素數。” - 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM