回答
我假設你可能熟悉C/C++這種靜態類型的語言。這意味着初始化一個變量時必須聲明一個變量的類型(例如,你會說int a;
)。
在C/C++中,當你做int a, b = 1;
(例如)時,你試圖做的語法是有效的語法,因爲我們將兩個變量a和b初始化爲整數,其中第二個變量是賦值爲1.
但是,Python是一種動態類型化語言 - 變量的類型不需要聲明。因此,當我們做a, b = 1
時,我們實際上使用了一個叫做「解包」的Python特性。 Python正試圖解壓縮1
變量a
和b
- 但這是不可能的,因爲1
只是一個單一的數據 - 它不是一個列表或元組或什麼。
因爲Python是動態類型的,所以我們不能只是啓動一個變量而不給它任何值(就像我們在做C時做的int a;
)。當你做a, b = 1
時,它試圖遍歷1
並將其內容分配給變量a
和b
。因此,錯誤TypeError: 'int' object is not iterable
。
對我來說,它看起來更像*數學*而不是C。在數學中,我會說「a,b = 1」並不罕見,並且意味着a和b都是1.而且Python非常麻煩,例如也支持「1
左右側不對稱。在
a = 1, 2
Python做包裝的右側參數。兩個逗號分隔的參數創建元組,所以這相當於a = (1, 2)
隨着
a, b = 1
蟒蛇試圖做拆包。它將右手錶達式的第一個值分配給a
,然後嘗試將第二個值分配給b
。由於沒有第二個值,這將失敗。它會將值1
視爲可迭代,因此會給出TypeError: int is not iterable
。
你應該寫點像a, b = 1, 2
。
可能還包括你得到一個'TypeError:'int'對象不是可迭代的',並且該錯誤是由於python試圖解壓'1'而導致的,並且沒有這樣做。 –
@cᴏʟᴅsᴘᴇᴇᴅ:你說得對,我編輯了答案。 –
我已經提出了兩個答案,因爲他們都很好地解釋了觀察到的行爲,雖然不同。 –
在第一種情況下,蟒蛇假定爲1元組和2
>>> a = 1, 2
>>> a
(1, 2)
但a, b = 1
你想給值a和b,所以必須對他們是兩個值,但你只提供一個即1
。如果你有一個長度爲2
的迭代,那麼它將工作。
>>> a, b = [6, 7]
>>> a
6
>>> b
7
在蟒蛇當你給兩個數/串,python解釋認爲它是一個元組
a = 1, 2
在上述行正在創建的元組對象稱爲
a, b = 1
在上面一行左邊的語法是針對一個元組的,所以它的右邊是元組值 所以
a,b = 1,1
作品
- 1. b!= a&1做什麼?
- 2. 爲什麼是不允許爲[&A,&B]在PPL類的成員變量
- 3. 爲什麼「{1:'a',True:'b',1.0:'c',1.00:'d'}」評估爲「{1:'d'}」?
- 4. 理解爲什麼A/B不工作,但fromInteger A/fromInteger B則
- 5. 爲什麼「a + + b」有效,但「a ++ b」不能?
- 6. %爲什麼不允許
- 7. d.update(dict(a = 1,b = 2))和d.update(dict('a'= 1,'b'= 2)之間有什麼區別)
- 8. 爲什麼「numpy.random.random((a,b))」不起作用?
- 9. A == B對B == A,有什麼區別
- 10. 什麼是A&B代表.Aggregate((a,b)=>聲明w/a&b)
- 11. a + = b和a = + b之間的區別是什麼,a ++和++ a?
- 12. 爲什麼a + = b * pow(10,c-i-1)== 99 C++?
- 13. a,b = b,a + b和a = b,b = a + b在fibonacci中的區別是什麼[Python]
- 14. SUM(a * b)做什麼?
- 15. javascript問題:var a =「1」; b = {a:a},b變體不是{「1」:1}
- 16. CakePHP Howto允許將值從A更改爲B但不反之亦然(B到A)
- 17. 爲什麼不允許密碼驗證?
- 18. 爲什麼sfinae如果constexpr不允許?
- 19. 爲什麼樣式表列不允許?
- 20. 爲什麼PHP不允許比較?
- 21. 爲什麼CalendarProvider不允許寫入ExtendedProperties?
- 22. 從{a-b,b-c,c-a}改變爲{(a,b),(b,c),(c,a)}?
- 23. 在Javascript中,爲什麼[1,2] == [1,2]或({a:1})==({a:1})爲false?
- 24. Python:爲什麼`random.randint(a,b)`返回包含`b`的範圍?
- 25. 在Javascript控制檯中給出1,{a:1,b:2}給出錯誤的{a:1}打字行爲是什麼?
- 26. 爲什麼當x(t)爲空時輸出是['a','b','a']。 Python
- 27. MatLab中的[A,B]和[A; B]有什麼區別?
- 28. 爲什麼A解析爲真,但B不是?
- 29. Tcl [list a b c] vs {a b c}有什麼區別,在什麼情況下?
- 30. 在git中,A..B和A ... B有什麼區別?
結果會是什麼? –
'a,b ='在某些情況下有效。例如'a,b = x'很好,如果'x'是一個長度爲2的迭代。在你的版本中沒有明確的意思。 – Holloway
因爲'a,b = 1'意味着完全不同的東西?這在所有編程語言中都是通用的,使用不同的語法來完成不同的事情。 –