Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用python解包序列_Python_Sequence_Iterable Unpacking - Fatal编程技术网

用python解包序列

用python解包序列,python,sequence,iterable-unpacking,Python,Sequence,Iterable Unpacking,我在几周前开始学习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(之前没有编程方面的知识),接着讨论了以下与序列解包相关的问题,这让我很困惑

出于某种原因,当我尝试此操作时:

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中使用的是Python2.7,在每次执行代码块之前,
for
循环从iterable中获取每个项,并将其分配给给定的名称

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

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

当你把它放在上下文中时,问题是什么是显而易见的:

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

一个值不能变成两个。

每次您在语句中执行一个
,它都会从iterable中提取一个项,然后根据您的需要将其解压(在您的情况下是
b,c
)。因此,在第一个示例中,您尝试将
b,c
分配给
1
,这是不可能的,而在下一个示例中,您尝试将
b,c=(1,2)
成功解包并给出b,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)
是可能的。

b=c=1
可能是一个人在无效
b,c=1
示例中想要的。