回答
我假设你可能熟悉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'意味着完全不同的东西?这在所有编程语言中都是通用的,使用不同的语法来完成不同的事情。 –