a, b = 1, 2
a, b = [1, 2]
# Note: when a set is used as an iterable,
# the ordering of assignment is undefined.
a, b = {1, 2}
# Note: when a dictionary is used as an iterable,
# only the keys are evaluated
a, b = {1: 'a', 2: 'b'}
# You can also use a generator:
def foo():
yield 1
yield 2
a, b = foo()
要使上面的示例工作,可迭代对象的大小必须与提供的参数数量相匹配。例如:
>>> a, b = 1, 2, 3
Traceback (most recent call last):
File "...", line 1, in <module>
a, b = 1, 2, 3
^^^^
ValueError: too many values to unpack (expected 2)
1条答案
按热度按时间vwoqyblh1#
这通常被称为可迭代解包。如果一个项是可迭代的,你可以用它来一次初始化多个变量。你可能已经见过的一个常见模式是元组解包,例如:
这在某种程度上相当于这样写:
可以在不止元组上执行此操作。下面是一些例子,它们都产生了类似的结果:
要使上面的示例工作,可迭代对象的大小必须与提供的参数数量相匹配。例如:
如果变量的数量未知,并且您只想获取其中的某个集合,则可以使用Extended Iterable Unpacking。在这个方法中,你可以在展开式中定义一个变量作为一个全部变量。从链接的PEP中,您可以看到以下示例:
可迭代解包也可以用在for循环中,这在遍历字典时非常常用。
dict.items()
返回一个可迭代对,允许你写这样的代码:Unpacking也可以用于更多嵌套的上下文中,允许您解包一些非常复杂的结构,所以请谨慎使用它!