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} |
参数列表中的
**将字典转换为关键字参数:
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解包参数列表