1

ここにコードの小さな部分があります

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

(ゲームは辞書です) 最後の行の ** の役割は何ですか?

4

4 に答える 4

4

**マッピング タイプ (たとえば a 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)
于 2013-04-01T16:34:31.910 に答える
1

関数はキーワード引数としてadd_edge辞書に渡されます。たとえば、次の 2 つは同等です。game

game = {'weight': 5, 'color': 'blue'}
G.add_edge(white, black, **game)
G.add_edge(white, black, weight=5, color='blue')
于 2013-04-01T16:34:08.467 に答える
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

...そして同じ結果が得られます。

于 2013-04-01T16:36:11.323 に答える
0

基本的に、引数が辞書であることを意味します。

通常**kwargs、キーワード引数を意味するものとして使用されます。

たとえば、次のようなメソッドを定義する場合:

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

これは、2 番目の引数がコレクション (引数の「リスト」) であることが期待され、.kwargsであることを意味することを意味しますdict

于 2013-04-01T16:32:16.603 に答える