为什么在 lambda 函数的参数列表中使用 *kwargs.values() 会导致语法错误?

问题描述 投票:0回答:1
(lambda **kwargs: *kwargs.values())(a=1, b=2)

此代码片段引发 SyntaxError,特别指出“无效语法”,指出在 lambda 函数的参数列表中使用 * 运算符。但是,我注意到使用 * 运算符从 kwargs 中解压值在函数体内工作得非常好,如以下 lambda 表达式所示:

python (lambda *args, **kwargs: max(*args, *kwargs.values()))(1, 2, 3, a=4, b=5)

在这种情况下,kwargs.values() 在函数体内使用 * 解包,没有任何问题。

我很好奇为什么会出现这种行为。为什么在 lambda 函数的参数列表中使用 *kwargs.values() 会导致语法错误,而在函数体内使用它却没有任何问题?

任何见解或解释将不胜感激。谢谢!

python-3.x lambda
1个回答
0
投票

second 示例中,

*kwargs.values()
kwargs.values()
扩展为
max
函数的各个参数,它在概念上等同于

d = {'a': 1, 'b': 2}
vals = list(d)
max(val[0], vals[1])

first示例中,解压没有任何意义,相当于

>>> def f(**kwargs):
...     *kwargs.values()
...
  File "<stdin>", line 2
SyntaxError: can't use starred expression here
© www.soinside.com 2019 - 2024. All rights reserved.