我最近遇到了一段 python 代码,看起来像这样
groups = {}
for d, *v in dishes:
for x in v:
groups.setdefault(x, []).append(d)
dishes 代表一个二维数组。 第一个 for 循环语句是什么意思? *v 是什么? v 前面的星号表示什么? 还有哪些情况是变量前加星号?
最佳答案
它本质上是元组/列表拆包和*args
可迭代拆包的组合。在 for 循环的每次迭代中,每个可迭代对象都会被解包。
首先让我们看一个简单的元组/列表拆包:
>>> x, y = (1, 2)
>>> x
1
>>> y
2
# And now in the context of a loop:
>>> for x, y in [(1, 2), (3, 4)]:
>>> print(f'x={x}, y={y}')
"x=1, y=2"
"x=3, y=4"
现在考虑以下内容(想象一下循环中的相同概念,如上所示):
>>> x, y = (1, 2, 3)
ValueError: too many values to unpack (expected 2)
>>> x, *y = 1, 2, 3
>>> x
1
>>> y
[2, 3]
请注意 *
如何允许 y
消耗所有剩余参数。
这类似于您在函数中使用 *
的方式 - 它允许未指定数量的参数并消耗所有参数。
您可以查看更多 (*args)
用法示例 here .
>>> def foo(x, *args):
>>> print(x)
>>> print(args)
>>>foo(1, 2, 3, 4)
1
[2, 3, 4]
至于实际例子,这里有一个简单的例子:
>>> names = ("Jack", "Johnson", "Senior")
>>> fist_name, *surnames = names
>>> print(surnames)
["Johnson", "Senior"]
关于python - 列表中的 x, *y 在 python 中是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57814195/