用python解包序列
我在几周前开始学习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 为什么呢 多谢各位 顺便
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
示例中想要的。