python - 字典解包操作符**

标签 python function dictionary keyword-argument

为什么在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/

相关文章:

java - 使用JAVA高效查找JSON中的键值

python - 如何访问 Pandas DataFrame 中嵌入的 json 对象?

javascript - 从javascript返回值到pyqt5

ios - Swift - 解析邮件中返回的数据

c++ - 如何判断一个有返回值的函数没有结果?

python - 撇号和列表错误

python - word2vec - 什么是最好的?添加、连接或平均词向量?

python - 有没有办法加快 Django 中的身份验证功能?

c - 从函数返回指针数组

python - 将字典中的字符串值转换为 int