表达式`dict(d1, **d2)`中`**`是什么意思?
我对下面这个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
会被展开成单独的位置参数一样。