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

时间:2010-02-12 23:57:14

标签: python syntax dictionary operators set-operations

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

d3 = dict(d1, **d2)

任务是将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}

6 个答案:

答案 0 :(得分:41)

参数列表中的

**具有特殊含义,如section 4.7 of the tutorial所述。与**kwargs一起传递的字典(或类字典)对象被扩展为可调用的关键字参数,就像*args被扩展为单独的位置参数一样。

答案 1 :(得分:12)

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

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

变为:

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

答案 2 :(得分:9)

在Python中,任何函数都可以接受多个参数*;
或多个keyword arguments与**。

接收方示例:

>>> 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

答案 3 :(得分:3)

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

答案 4 :(得分:1)

答案 5 :(得分:1)

你得到了**运算符的答案。这是添加词典的另一种方法

>>> 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}