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