在python中解包序列

stg*_*rge 2 python sequence iterable-unpacking

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

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

for b, c in [1,2]:
    print b,c
Run Code Online (Sandbox Code Playgroud)

我收到一条错误消息:

TypeError:'int'对象不可迭代

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

但是当我尝试同样的事情时,只需要列表中的元组:

for b, c in [(1,2)]:
    print b,c
Run Code Online (Sandbox Code Playgroud)

它有效 - 我得到:

1 2

这是为什么?

谢谢.

顺便说一下我使用的是Python 2.7

Gar*_*tty 6

在Python中,for循环从iterable中获取每个项目,并在每次执行代码块之前将其分配给给定的名称.

在第一种情况下,巨蟒采取的第一个项目,1并试图赋予它b, c-这是行不通的,只有一个值来分配,因此错误.

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

当你把它放到上下文中时,问题很清楚:

a, b = 1, 2
a, b = 1
Run Code Online (Sandbox Code Playgroud)

一个值不能变成两个.


Suk*_*lra 6

每次执行in <iterable>语句时,它都会从iterable中获取一个项目,然后根据您的需要将其解压缩b, c.因此,在第一个例子,你尝试分配b, c1这是不可能的,而在下面的例子中,你做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)
Run Code Online (Sandbox Code Playgroud)

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