为什么不允许a,b = 1?

时间:2017-10-28 12:58:16

标签: python python-2.7 syntax

我想知道变量分配以及为什么允许这样做:

a = 1, 2

a = b = 1

但不允许这样做:

a, b = 1

背后的逻辑是什么? 谢谢

4 个答案:

答案 0 :(得分:3)

我假设你可能熟悉像C / C ++这样的语言,这是一种静态类型的语言。这意味着在初始化变量时必须声明变量的类型(例如,您要说int a;)。

在C / C ++中,您尝试执行的语法是执行int a, b = 1;时的有效语法(例如),因为我们将两个变量a和b初始化为整数,其中第二个变量我们正在分配一个值。

但是,Python是一种动态类型语言 - 不需要声明变量的类型。因此,当我们执行a, b = 1时,我们实际上正在使用Python所具有的称为“解包”的功能。 Python正试图解压缩 1到变量ab - 但这是不可能的,因为1只是一个数据 - 它不是列表或元组或其他什么。

因为Python是动态类型的,所以我们不能只是启动变量而不给它任何值(就像我们在int a;时在C中那样)。当您执行a, b = 1时,它会尝试遍历1并将其内容分配给变量ab。因此,错误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

作品