2

几周前我开始学习python(以前没有编程知识),然后遇到了以下与序列解包相关的问题,这让我很困惑。

出于某种原因,当我尝试这个时:

for b, c in [1,2]:
    print b,c

我收到一条错误消息:

TypeError:“int”对象不可迭代

当我尝试用元组 (1,2) 替换列表时也会发生同样的情况

但是当我尝试同样的事情时,只需在列表中添加一个元组:

for b, c in [(1,2)]:
    print b,c

它有效 - 我得到:

1 2

这是为什么?

谢谢你。

顺便说一句,我正在使用 Python 2.7

4

2 回答 2

6

每次您执行in <iterable>语句时,它都会从可迭代对象中获取一个项目,然后根据您的需要将其解包,在您的情况下b, c。因此,在第一个示例中,您尝试分配b, c不可能1的对象,而在下一个示例中,您b, c = (1, 2)将成功解包并给出 ab,c。

例如,尝试打印出这些值。

>>> for x in [1, 2]:
        print "X: ", x


X:  1
X:  2

>>> for x in [(1, 2)]:
        print "X: ", x


X:  (1, 2)

因此,分配b, c = 1是不可能的,而分配b, c = (1, 2)是可能的。

于 2013-05-22T09:02:36.500 回答
6

在 Python 中,for循环从可迭代对象中获取每个项目,并将其分配给给定的名称,然后每次执行代码块。

在第一种情况下,Python 获取第一项,1并尝试将其分配给它b, c——这不起作用,因为只有一个值要分配,因此出现错误。

在第二个示例中,第一个值是整个元组(1, 2)- 因此可以将其解包,因为它包含两个必需的值。

当你把它放在上下文中时,很清楚问题是什么:

a, b = 1, 2
a, b = 1

一个值不能变成两个。

于 2013-05-22T09:00:03.587 回答