python中**的意义是什么(当不是数学表达式时)

时间:2013-04-01 16:29:50

标签: python

这是代码的一小部分

import networkx as nx
G=nx.MultiDiGraph()
...
G.add_edge(white, black, **game)

(游戏是字典) **在最后一行中的作用是什么

4 个答案:

答案 0 :(得分:4)

**是将映射类型(例如dict)解包为关键字参数的运算符。

考虑:

def foo(bar=1):
   print bar

d = {'bar':2}
foo(**d)

在此示例中,将打印2。另一方面,您还可以在**kwargs类型变量中吸收所有未知关键字参数:

def foo(a=1,b=2,**kwargs):
    print kwargs

foo(a=1,b=2,c=3)

当然,您也可以将这些形式组合在一起:

def foo(a=1,b=2,**kwargs):
    print b
    print kwargs

d = {'b':3, 'c':4}
foo(**d)

答案 1 :(得分:1)

函数add_edge作为keyword arguments传递到字典game中。例如,以下两个是等效的:

game = {'weight': 5, 'color': 'blue'}
G.add_edge(white, black, **game)
G.add_edge(white, black, weight=5, color='blue')

答案 2 :(得分:1)

它扩展了一个字典,因此它的键对值被用作命名参数。例如,考虑一下这个函数:

>>> def f(a, b, c):
...     return a+b-c
... 

我可以调用它以原始顺序传递其参数:

>>> f(1,2,3)
0

但是如果我将值赋值给参数名称,我也可以切换它们:

>>> f(1,c=3,b=2)
0

当一个函数调用一个以**为前缀的字典的函数时,该字典的对将用作参数。所以,我可以在下面创建字典

>>> params = {'c':3, 'b':2}

...并将其传递给我的函数......

>>> f(1,**params)
0

......并且会得到相同的结果。

答案 3 :(得分:0)

这意味着论证基本上都是字典。

它通常用作**kwargs,意思是关键字参数。

例如,当您定义类似的方法时:

def myMethod(first, *args, **kwargs):
    ....

这意味着第二个参数应该是一个集合(参数的“列表”),而kwargs应该是dict