關於Python鏈式賦值的賦值順序問題

2021-09-25 03:28:21 字數 933 閱讀 2261

在《第4.7節 python特色的序列解包、鏈式賦值、鏈式比較》一文中,老猿這樣介紹的:

鏈式賦值是用一行語句將多個變數賦值為同乙個值,語法如下:

變數1=變數2=變數n=賦值表示式

該語法實際執行效果類似於:

變數n=賦值表示式

變數2=變數n

變數1=變數2

有csdn的博友johnny592友情指出老猿這種解釋錯了,正確的應該是「 a=b=c=1 順序是:a=1,b=a,c=a,有順序」,老猿仔細驗證了一下,證明johnny592說得是正確的,證明過程如下:

>>> k,l=0,[10,20,30,40]

>>> k=l[k]=3

>>> l #下面的結果顯示l[3]=3,說明k先被賦值為3,才有l[3]賦值為3

[10, 20, 30, 3]

>>>

>>>> k,l=0,[10,20,30,40]

>>> k=l[k]=l[l[k]-1]=3

>>> l #跟上面結果對比表明:l[k]-1=2,說明l[k]比l[l[k]-1]先執行賦值

[10, 20, 3, 3]

>>>

從上述案例執行結果可以看出,l[k]中的k是3,因此是k先賦值為3,再執行的l[k]的賦值。也就是說鏈式賦值是從左到右的順序執行賦值的。

再次感謝johnny592博友!!

再次訂正:

經博友「碼哥yoo_____」提醒,上面博文內容的說法還是有問題,正取的說法應該是:

a=b=c=d

賦值處理過程如下:

temp = d

a = temp

b=temp

c=temp

感謝博友「碼哥yoo_____」提醒!

具體證明方式請參考《python鏈式賦值執行順序及執行方式的證明》。

鏈式賦值 系列解包賦值 常量

鏈式賦值 用於同乙個物件賦值多個變數。eg x y 123,相當於 x 123 y 123 系列解包賦值 系列資料賦值給對應個數的變數 個數必須保持一致 使用系列解包賦值實現變數交換 a,b 10,20 a,b 20 10 print a,b 常量,python不支援,但實際上可以,只是邏輯是不一樣...

python分片賦值 關於 python 分片賦值

首先你要理解什麼是分片,也有的書叫切片 slice 當你需要乙個序列的子串的時候,你就可以使用切片操作 a a b c d e f g 在a這個序列中,如果你想擷取裡面 c d e 這個子串行,那麼你就可以使用切片a 2 5 它的語法形式是a start end 這裡有乙個區間邊沿取值的問題。首先你...

Python鏈式賦值執行順序及執行方式的證明

老猿進行了驗證,發現確實如期所說。具體證明方法如下 class example def init self,name self.name name self.val 0 self.visitcount 0def getvalue self self.visitcount 1print getvalu...