代码之家  ›  专栏  ›  技术社区  ›  λ Jonas Gorauskas

“dict(d1,**d2)”一词中的“**”是什么意思?

  •  36
  • λ Jonas Gorauskas  · 技术社区  · 14 年前

    我对下面的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 回复  |  直到 12 年前
        1
  •  38
  •   Thomas Wouters    14 年前

    ** 在论点列表中有一个特殊的含义,如 section 4.7 of the tutorial . 与一起传递的Dictionary(或类似Dictionary)对象 **kwargs 扩展为可调用的关键字参数,类似于 *args 扩展为单独的位置参数。

        2
  •  10
  •   Mark Byers    14 年前

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

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

    变成:

    >>> d3 = dict(d1, c=3, d=4)
    
        3
  •  9
  •   mechanical_meat nazca    14 年前

    在python中,任何函数都可以接受带*的多个参数;
    或多重 keyword arguments 用**。

    接收端示例:

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

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

    >>> mydict = dict(a=1,b=2,c=3)
    >>> fn(**mydict)
    a
    c
    b
    
        4
  •  3
  •   mantrapeze    14 年前

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

        5
  •  1
  •   Sridhar Iyer    14 年前
        6
  •  1
  •   ghostdog74    14 年前

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

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