ここにコードの小さな部分があります
import networkx as nx
G=nx.MultiDiGraph()
...
G.add_edge(white, black, **game)
(ゲームは辞書です) 最後の行の ** の役割は何ですか?
ここにコードの小さな部分があります
import networkx as nx
G=nx.MultiDiGraph()
...
G.add_edge(white, black, **game)
(ゲームは辞書です) 最後の行の ** の役割は何ですか?
**
マッピング タイプ (たとえば 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)
関数はキーワード引数としてadd_edge
辞書に渡されます。たとえば、次の 2 つは同等です。game
game = {'weight': 5, 'color': 'blue'}
G.add_edge(white, black, **game)
G.add_edge(white, black, weight=5, color='blue')
ディクショナリを展開して、そのキー ペアの値が名前付きパラメータとして使用されるようにします。たとえば、次の関数を考えてみましょう。
>>> 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
...そして同じ結果が得られます。
基本的に、引数が辞書であることを意味します。
通常**kwargs
、キーワード引数を意味するものとして使用されます。
たとえば、次のようなメソッドを定義する場合:
def myMethod(first, *args, **kwargs):
....
これは、2 番目の引数がコレクション (引数の「リスト」) であることが期待され、.kwargs
であることを意味することを意味しますdict
。