关于python:表达式”dict(d1,**d2)”中的”**”是什么意思?

What does `**` mean in the expression `dict(d1, **d2)`?

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

1
d3 = dict(d1, **d2)

任务是将两个词典合并成第三个词典,上面的表达式可以很好地完成任务。我对**运算符很感兴趣,它对表达式的具体作用是什么。我以为**是电源操作器,还没有看到它在上面的上下文中使用过。

完整的代码片段如下:

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


参数列表中的**具有特殊含义,如本教程第4.7节所述。与**kwargs一起传递的dictionary(或dictionary-like)对象被扩展为可调用的关键字参数,与*args非常相似,它被扩展为单独的位置参数。


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

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

变成:

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


在python中,任何函数都可以接受带*的多个参数;或多个带**的关键字参数。

接收端示例:

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

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

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


还值得一提的是dict构造函数的机制。它将一个初始字典作为第一个参数,还可以接受关键字参数,每个参数表示要添加到新创建的字典中的新成员。


你已经得到了**接线员的答复。这是添加字典的另一种方法

1
2
3
4
5
6
>>> d1 = {'a': 1, 'b': 2}
>>> d2 = {'c': 3, 'd': 4}
>>> d3=d1.copy()
>>> d3.update(d2)
>>> d3
{'a': 1, 'c': 3, 'b': 2, 'd': 4}

该运算符用于解包参数列表:http://docs.python.org/tutorial/controlflow.html解包参数列表