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

λ J*_*kas 43 python syntax dictionary operators set-operations

我对以下python表达式很感兴趣:

d3 = dict(d1, **d2)
Run Code Online (Sandbox Code Playgroud)

任务是将2个词典合并为第三个词典,上面的表达式完成任务就好了.我对**运算符感兴趣,它对表达式究竟做了什么.我认为**是功率运算符,还没有看到它在上面的上下文中使用过.

完整的代码片段是这样的:

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

Tho*_*ers 43

**在参数列表中有一个特殊的含义,如本教程的4.7节所述.传递的字典(或类字典)对象**kwargs被扩展为可调用的关键字参数,就像*args扩展为单独的位置参数一样.


Mar*_*ers 12

**将字典转换为关键字参数:

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

变为:

>>> d3 = dict(d1, c=3, d=4)
Run Code Online (Sandbox Code Playgroud)


ber*_*nie 9

在Python中,任何函数都可以用*接受多个参数;
或**的多个关键字参数.

接收方示例:

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

呼叫方示例(感谢托马斯):

>>> mydict = dict(a=1,b=2,c=3)
>>> fn(**mydict)
a
c
b
Run Code Online (Sandbox Code Playgroud)