それ自体は演算子ではないため、実際には名前はありませんが、「構文規則」として定義されています。だからそれは呼ばれるべきです:
引数のリストがある場合は、「引数のアンパック」*args
と呼ばれ、同じ方法で「キーワードの引数のアンパック」と呼ばれます。**kwargs
のようにの左側で使用する場合=
はa, *middle, end = my_tuple
、「タプルの解凍」と言います。
合計で、3つのタイプの(単一パラメーター)引数があります。
def f(x) # x: positional argument
def f(x, y=0) # y: keyword argument
def f(x, *xs, y=0) # y: keyword-only argument
*args
引数には、「変数位置パラメータ」と呼ばれている**kwargs
「変数キーワードパラメータ」です。キーワードのみの引数を位置的に指定することはできません。これは、可変の位置パラメーターが、渡したすべての引数を取るためです。
このほとんどはPEP 0362および3102にあり、ドキュメントの制御フローセクションにもあります。ただし、関数署名オブジェクトPEPはドラフトにすぎず、用語は1人のアイデアにすぎない可能性があることに注意してください。しかし、とにかく良い用語です。:)
したがって、*
および**
引数はそれぞれのデータ構造をアンパックするだけです:
args = (1, 2, 3) # usually a tuple, always an iterable[1]
f(*args) → f(1, 2, 3)
# and
kwargs = {"a": 1, "b": 2, "c": 3} # usually a dict, always a mapping*
f(**kwargs) -> f(a=1, b=2, c=3)
[1]:イテラブルはメソッドを実装するオブジェクトで__iter__()
あり、マッピングはkeys()
およびを実装するオブジェクトです__getitem__()
。このプロトコルをサポートするオブジェクトは、コンストラクターtuple()
とによって理解されるdict()
ため、引数のアンパックに使用できます。