Python 関数呼び出しでの と による引数のアンパック*
Python 関数呼び出しでは、アスタリスク ( ) および二重アスタリスク (*) 演算子は、解凍において重要な役割を果たします。シーケンスと辞書をそれぞれ位置引数または名前付き引数に変換します。
単一スター (*) アンパック:
単一のアスタリスク演算子 (*) は、シーケンスまたはコレクションを位置引数にアンパックします。引数。次の関数について考えてみましょう:
def add(a, b): return a + b
値のタプル value = (1, 2) が与えられた場合、* 演算子を使用してタプルを解凍し、その要素を add 関数に渡すことができます:
s = add(*values)
これは、
s = add(1, 2)
Double Star と書くのと同じです。 () 解凍:**
二重アスタリスク演算子 (**) も同様の原理に従いますが、辞書を操作します。辞書のキーと値のペアを名前付き引数に解凍します:
values = { 'a': 1, 'b': 2 } s = add(**values)
これは次と同等です:
s = add(a=1, b=2)
結合アンパック:
両方の演算子を 1 つの関数呼び出しで同時に使用できます。たとえば、関数:
def sum(a, b, c, d): return a + b + c + d
と 2 つの値のセット:
values1 = (1, 2) values2 = { 'c': 10, 'd': 15 }
がある場合、これらの値は次のように展開できます:
s = add(*values1, **values2)
これは次のようになります。同等:
s = sum(1, 2, c=10, d=15)
パフォーマンス影響:
および * 解凍演算子を使用すると、通常、パフォーマンスへの影響は最小限になります。ただし、アンパックされるシーケンスまたは辞書が大きい場合は、アンパック処理中に追加のオーバーヘッドが発生する可能性があります。これは、ほとんどの実際的なシナリオでは無視できます。
同等の方法:
アンパック演算子を使用する代わりに、*args および **kwargs 構文を使用することもできます。 、それぞれ:
def add(*args, **kwargs): s = 0 for arg in args: s += arg for key, value in kwargs.items(): s += value
最終的には、アンパック演算子を使用するか、または*args/**kwargs はコードのスタイルと設定によって異なります。
以上がPython 関数呼び出しで * と unpack 引数をどのように実行するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。