>>> x = [1,3]
>>> x
[1, 3]
>>> x[0]
1
>>> x[1]
3
>>> x,y = [1,3]
>>> x
1
>>> y
3
>>> x[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not subscriptable
據我所知,列表本身就是一個值。因此,它可以分配給一個變量。在Python中解壓列表的概念 - 衝突的語法規則
這在上面的代碼中很明顯,其中x = [1,3],x返回列表值[1,3]。但是,如果賦值運算符左側有兩個變量,則情況會改變。 列表到變量的右側不再是值,但是,相反,該列表的元素是值。
有人會友好地解釋爲什麼這樣。提前致謝。
也許我誤解了「解包」是什麼。賦值運算符左側有多個變量時,規則是否會更改?
'x,y = [1,3]'是一個拆包,'x = [1,3]'不是。你可以使用類似'[x] = [1]'的方式將長度爲1的列表解開爲單個目標,但是自己分配給'x'不會觸發解包。 – user2357112
是的,當賦值運算符左側有多個變量時,規則會改變。這會觸發賦值運算符右側的對象的「解包」,以及對左側相關變量的相應賦值。這是爲什麼?因爲有人(可能是Guido)認爲這是Python的一個很好的功能。 –
好的,所以我不理解「賦值給變量」和「解包」之間的區別。因爲有一個賦值運算符,我的假設是右邊的值被分配給左邊的變量。在這種情況下,列表被分配給左側的單個變量,這對我來說很有意義。但是,當左側有多個變量時,它不會分配值 - 列表 - 而是列表中的元素。這對我來說沒有意義,因爲值是列表本身,而不是列表中的元素。 – efw