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
在Python中,for循环从iterable中获取每个项目,并在每次执行代码块之前将其分配给给定的名称.
在第一种情况下,巨蟒采取的第一个项目,1并试图赋予它b, c-这是行不通的,只有一个值来分配,因此错误.
在第二个示例中,第一个值是整个元组(1, 2)- 因此可以解压缩,因为它包含两个必需值.
当你把它放到上下文中时,问题很清楚:
a, b = 1, 2
a, b = 1
Run Code Online (Sandbox Code Playgroud)
一个值不能变成两个.
每次执行in <iterable>语句时,它都会从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)
Run Code Online (Sandbox Code Playgroud)
因此,分配b, c = 1是不可能的,而分配b, c = (1, 2)是可能的.
| 归档时间: |
|
| 查看次数: |
3322 次 |
| 最近记录: |