58

次の python 式に興味があります。

d3 = dict(d1, **d2)

タスクは 2 つの辞書を 3 つ目の辞書にマージすることであり、上記の式はそのタスクをうまく実行します。私は ** 演算子に興味があり、式に対して正確に何をしているのか. ** はべき乗演算子だと思っていましたが、上記のコンテキストでまだ使用されていません。

コードの完全なスニペットは次のとおりです。

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

6 に答える 6

50

**チュートリアルのセクション 4.7 で説明されているように、引数リスト内には特別な意味があります。で渡されたディクショナリ (またはディクショナリに似た) オブジェクトは**kwargs、callable へのキーワード引数に展開されます。これ*argsは、個別の位置引数に展開されるのと同様です。

于 2010-02-13T00:00:29.700 に答える
15

** は、辞書をキーワード パラメータに変換します。

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

なる:

>>> d3 = dict(d1, c=3, d=4)
于 2010-02-13T00:01:43.283 に答える
10

Python では、任意の関数で *; を使用して複数の引数を受け入れることができます。または** を使用した
複数のキーワード引数。

受信側の例:

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

呼び出し側の例 (Thomas に感謝):

>>> mydict = dict(a=1,b=2,c=3)
>>> fn(**mydict)
a
c
b
于 2010-02-12T23:59:48.893 に答える
3

dict コンストラクターの仕組みについても言及する価値があります。最初の引数として初期ディクショナリを取り、キーワード引数も取ることができます。各引数は、新しく作成されたディクショナリに追加する新しいメンバーを表します。

于 2010-02-13T08:53:00.970 に答える
2

**演算子の答えがあります。辞書を追加する別の方法は次のとおりです

>>> 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}
于 2010-02-13T00:24:55.713 に答える
1

その演算子は、引数リストをアンパックするために使用されます: http://docs.python.org/tutorial/controlflow.html#unpacking-argument-lists

于 2010-02-13T00:03:48.083 に答える