回答
我假設你可能熟悉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. 爲什麼`[1,「a」] :: [forall a。顯示a => a]`不允許?
- 2. b!= a&1做什麼?
- 3. 爲什麼是不允許爲[&A,&B]在PPL類的成員變量
- 4. 爲什麼「{1:'a',True:'b',1.0:'c',1.00:'d'}」評估爲「{1:'d'}」?
- 5. 爲什麼a.compareTo(b)等於compareTo(a,b)或a.method(b)= method(a,b)?
- 6. 爲什麼(A - B)。^ 2在MATLAB中不等於(B - A)。^ 2?
- 7. 理解爲什麼A/B不工作,但fromInteger A/fromInteger B則
- 8. 爲什麼「a + + b」有效,但「a ++ b」不能?
- 9. 爲什麼有A = A +之間的差異B和A + = B
- 10. %爲什麼不允許
- 11. 爲什麼「a &&(b = 5/a)」將「5/a」分配給「b」?
- 12. d.update(dict(a = 1,b = 2))和d.update(dict('a'= 1,'b'= 2)之間有什麼區別)
- 13. 爲什麼fold會預期(a - > b - > a)而不是(b - > a - > a)?
- 14. 爲什麼「numpy.random.random((a,b))」不起作用?
- 15. int b = 0,a = 1; b = ++ a + ++ a; b的價值是什麼?它的計算是什麼?
- 16. A == B對B == A,有什麼區別
- 17. 爲什麼的Equals [A <: B >:B,B]不編譯
- 18. 爲什麼A - B + B!= A使用PHP DateTime和DateInterval?
- 19. vector.push_back(B)和vector.push_back(new A((* B))),爲什麼行爲不一樣?
- 20. 爲什麼在C++中不允許int&a = <value>?
- 21. 爲什麼我不能使用| a,b |而不是|(a,b)|在arr.map {|(a,b)|中!b.nil? ? a + b:a}?
- 22. 爲什麼Numpy會以不同的方式處理a + = b和a = a + b
- 23. 什麼是A&B代表.Aggregate((a,b)=>聲明w/a&b)
- 24. 爲什麼B = B + 1當B是字節不會編譯,但B + = 1編譯
- 25. 爲什麼char a = -1與unsigned char b = -1不同,在C編程中
- 26. 爲什麼var c =「a」|| 「b」返回c =「a」和var c =「a」&&「b」返回c =「b」?
- 27. Ruby中的object.method(a,b)和方法(a,b)有什麼區別
- 28. 紅寶石。爲什麼arr =%w {'a','b','c'} => [「'a',」,「'b',」,「'c'」]
- 29. a + = b和a = + b之間的區別是什麼,a ++和++ a?
- 30. 爲什麼選擇 'A'= 'B' 的MYSQL = 'C' 返回1?
結果會是什麼? –
'a,b ='在某些情況下有效。例如'a,b = x'很好,如果'x'是一個長度爲2的迭代。在你的版本中沒有明確的意思。 – Holloway
因爲'a,b = 1'意味着完全不同的東西?這在所有編程語言中都是通用的,使用不同的語法來完成不同的事情。 –