在Python中,'a,B,c = input().split()'是什么意思?

oknwwptz  于 2023-06-04  发布在  Python
关注(0)|答案(1)|浏览(548)
a, b, c = input().split()

我在学习Python编程时遇到了一个问题,我认为这是一个基本问题,但我不明白该语句是如何工作的。有人能帮我解答吗?
谢谢大家!

vwoqyblh

vwoqyblh1#

这通常被称为可迭代解包。如果一个项是可迭代的,你可以用它来一次初始化多个变量。你可能已经见过的一个常见模式是元组解包,例如:

a, b = 1, 2

这在某种程度上相当于这样写:

vals = (1, 2)
a = vals[1]
b = vals[2]

可以在不止元组上执行此操作。下面是一些例子,它们都产生了类似的结果:

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)

如果变量的数量未知,并且您只想获取其中的某个集合,则可以使用Extended Iterable Unpacking。在这个方法中,你可以在展开式中定义一个变量作为一个全部变量。从链接的PEP中,您可以看到以下示例:

>>> a, *b, c = range(5)
>>> a
0
>>> c
4
>>> b
[1, 2, 3]

可迭代解包也可以用在for循环中,这在遍历字典时非常常用。dict.items()返回一个可迭代对,允许你写这样的代码:

>>> data = {1:2, 3:4}
>>> for key, value in data.items():
...     print(key, value)
1 2
3 4

Unpacking也可以用于更多嵌套的上下文中,允许您解包一些非常复杂的结构,所以请谨慎使用它!

>>> data = [
...     [1, [2, [3, 4, 5, 6]]],
...     [1, [2, [3, 4, 5, 6, 7]]],
... ]
>>> for a, [b, [c, *_, d]] in data:
...     print(a, b, c, d)
1 2 3 6
1 2 3 7

相关问题