为什么在python中使用这行代码会报错:
required, *args, **kwargs = "Welcome to...", 1, 2, 3, site='stackoverflow.com'
^
SyntaxError: invalid syntax
在函数签名中使用它是可以的:
def function1(required, *args, **kwargs):
pass
function1("Welcome to...", 1, 2, 3, site='stackoverflow.com')
最佳答案
我的猜测是因为如果我们想要这个 **kwargs
工作,我们必须在右侧有关键字参数(它应该转换为字典),就像你做的那样:
required, *args, **kwargs = "Welcome to...", 1, 2, 3, site='stackoverflow.com'
但正如我们所知,赋值的右手边是被评估的拳头(然后解包发生)。所以在这种情况下,您可以在一个无效的表达式中考虑另一个赋值。例如:
a = (1, 2, 3) # Valid
b = (1, 2, var=20) # Invalid
通过查看:
from dis import dis
dis('a, b, c = 5, 4, 3')
1 0 LOAD_CONST 0 ((5, 4, 3))
2 UNPACK_SEQUENCE 3
4 STORE_NAME 0 (a)
6 STORE_NAME 1 (b)
8 STORE_NAME 2 (c)
10 LOAD_CONST 1 (None)
12 RETURN_VALUE
Python 试图从赋值的右侧构建一个元组,你不能在其中有一个赋值语句。我认为发生了同样的事情,这就是原因。
关于python - 字典解包操作符**,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68461116/