在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Python/ a, b = b, a + b為什么表示a=b,b=a+b???

a, b = b, a + b為什么表示a=b,b=a+b???

python中,
a,b=1,2
a,b=b,a+b
第二行為什么表示a=b,b=a+b???這種表達式要怎么理解

回答
編輯回答
憶當(dāng)年

a=b,b=a+b, 需要注意的是b=a+b中a還是原來的數(shù)值,因為已經(jīng)提前存儲在棧中了

2018年4月29日 18:34
編輯回答
久愛她

我一直以為是簡單的賦值,看了樓上回答后,我。。。

2017年10月2日 14:57
編輯回答
半心人

dis模塊來反編譯字節(jié)碼,看看其中的操作過程。
有詳細的注釋

>>> import dis

>>> def x():
    (a,b)=(1,2)

    
>>> dis.dis(x)
  2           0 LOAD_CONST               3 ((1, 2)) # 元組
              3 UNPACK_SEQUENCE          2 # 解包元組序列,從右到左依次入棧。即先2后1
              6 STORE_FAST               0 (a) # 棧頂值保存到變量, a = 1
              9 STORE_FAST               1 (b) # b = 2
             12 LOAD_CONST               0 (None)
             15 RETURN_VALUE
>>> def x():
    a,b = 1,2

    
>>> dis.dis(x) # a,b = 1,2  和  (a,b)=(1,2)  完全等價。
  2           0 LOAD_CONST               3 ((1, 2))
              3 UNPACK_SEQUENCE          2
              6 STORE_FAST               0 (a)
              9 STORE_FAST               1 (b)
             12 LOAD_CONST               0 (None)
             15 RETURN_VALUE
>>> def x():
    a,b = 1,2
    a,b = b,a+b

    
>>> dis.dis(x)
  2           0 LOAD_CONST               3 ((1, 2))
              3 UNPACK_SEQUENCE          2
              6 STORE_FAST               0 (a)
              9 STORE_FAST               1 (b)

  3          12 LOAD_FAST                1 (b) # 讀取 變量b的值,入棧
             15 LOAD_FAST                0 (a)
             18 LOAD_FAST                1 (b)
             21 BINARY_ADD                 # 二目加法,就是把 a、b相加
             22 ROT_TWO                    # 交換棧頂兩個值的次序,即把b的值放到棧頂,a+b的值在第二
             23 STORE_FAST               0 (a) # a = b
             26 STORE_FAST               1 (b) # b = a+b
             29 LOAD_CONST               0 (None)
             32 RETURN_VALUE
>>> 
2017年4月4日 03:47
編輯回答
乞許

這是python 元組拆包 的特性。元組拆包形式是平行賦值,也就是說把一個可迭代對象里的元素,一并賦
值到由對應(yīng)的變量組成的元組中。a,b = b, a+b 可以理解為:

t = (a, a + b)
a, b = t

因為這個特性,python中函數(shù)也是允許返回多個值:

def f():
    return 1, 3

a, b = f()
2017年7月28日 14:12