表达式`dict(d1, **d2)`中`**`是什么意思?

68 投票
6 回答
19909 浏览
提问于 2025-04-15 19:13

我对下面这个Python表达式很感兴趣:

d3 = dict(d1, **d2)

这个任务是把两个字典合并成一个新的字典,而上面的表达式正好完成了这个任务。我想了解一下**这个符号,它到底在这个表达式中做了什么。我原本以为**是用来表示幂运算的,但在这个上下文中我还没见过它的用法。

完整的代码片段是:

>>> d1 = {'a': 1, 'b': 2}
>>> d2 = {'c': 3, 'd': 4}
>>> d3 = dict(d1, **d2)
>>> print d3
{'a': 1, 'c': 3, 'b': 2, 'd': 4}

6 个回答

11

在Python中,任何函数都可以通过*来接收多个参数;
或者通过**来接收多个关键字参数

接收参数的示例:

>>> def fn(**kwargs):
...   for kwarg in kwargs:
...     print kwarg
... 
>>> fn(a=1,b=2,c=3)
a
c
b

调用函数的示例(感谢Thomas):

>>> mydict = dict(a=1,b=2,c=3)
>>> fn(**mydict)
a
c
b
18

**这个符号可以把字典转换成关键字参数:

>>> d1 = {'a': 1, 'b': 2}
>>> d2 = {'c': 3, 'd': 4}
>>> d3 = dict(d1, **d2)

变成:

>>> d3 = dict(d1, c=3, d=4)
51

** 在函数参数列表中有特别的含义,具体可以参考教程的第4.7节。当你用 **kwargs 传递一个字典(或者类似字典的对象)时,它会被展开成关键字参数,就像 *args 会被展开成单独的位置参数一样。

撰写回答