我想知道变量分配以及为什么允许这样做:
a = 1, 2
a = b = 1
但不允许这样做:
a, b = 1
背后的逻辑是什么? 谢谢
答案 0 :(得分:3)
我假设你可能熟悉像C / C ++这样的语言,这是一种静态类型的语言。这意味着在初始化变量时必须声明变量的类型(例如,您要说int a;
)。
在C / C ++中,您尝试执行的语法是执行int a, b = 1;
时的有效语法(例如),因为我们将两个变量a和b初始化为整数,其中第二个变量我们正在分配一个值。
但是,Python是一种动态类型语言 - 不需要声明变量的类型。因此,当我们执行a, b = 1
时,我们实际上正在使用Python所具有的称为“解包”的功能。 Python正试图解压缩 1
到变量a
和b
- 但这是不可能的,因为1
只是一个数据 - 它不是列表或元组或其他什么。
因为Python是动态类型的,所以我们不能只是启动变量而不给它任何值(就像我们在int a;
时在C中那样)。当您执行a, b = 1
时,它会尝试遍历1
并将其内容分配给变量a
和b
。因此,错误TypeError: 'int' object is not iterable
。
答案 1 :(得分:1)
左侧和右侧不对称。在
a = 1, 2
python执行右侧参数的打包。两个以逗号分隔的参数创建元组,因此这相当于a = (1, 2)
用
a, b = 1
python尝试解压缩。它将右侧表达式的第一个值分配给a
,然后尝试将第二个值分配给b
。由于没有第二个值,这将失败。它会将值1
视为 iterable ,因此会给TypeError: int is not iterable
。
您应该写一些类似a, b = 1, 2
的内容。
答案 2 :(得分:0)
在第一种情况下,python假定a是一个1和2的元组
readAll()
但>>> a = 1, 2
>>> a
(1, 2)
你想给a和b赋值,所以它们必须有两个值,但你只提供一个a, b = 1
。如果你的长度为1
,那么它就可以了。
2
答案 3 :(得分:0)
在python中,当你给出两个数字/字符串时,python解释器认为它是一个元组
>>> a, b = [6, 7]
>>> a
6
>>> b
7
在上面一行中你创建了一个名为
的元组对象 a = 1, 2
在上面的行中,左侧的语法是一个元组,所以右侧它需要元组值 所以
a, b = 1
作品