Python でアスタリスク * はどういう意味ですか? [重複] 質問する

Python でアスタリスク * はどういう意味ですか? [重複] 質問する

Python でも C と同じように * に特別な意味があるのでしょうか? Python Cookbook で次のような関数を見ました:

def get(self, *a, **kw)

説明していただくか、回答が見つかる場所を教えていただけますか (Google は * をワイルドカード文字として解釈するため、満足のいく回答を見つけることができません)。

ベストアンサー1

見る関数定義言語リファレンスで。

フォーム*identifierが存在する場合、余分な位置パラメータを受け取るタプルに初期化され、デフォルトで空のタプルになります。フォームが存在する場合**identifier、余分なキーワード引数を受け取る新しい辞書に初期化され、デフォルトで新しい空の辞書になります。

また、以下も参照してください関数呼び出し

位置引数とキーワード引数が何であるかを知っていると仮定して、いくつか例を挙げます。

例1:

# Excess keyword argument (python 3) example:
def foo(a, b, c, **args):
    print("a = %s" % (a,))
    print("b = %s" % (b,))
    print("c = %s" % (c,))
    print(args)
    
foo(a="testa", d="excess", c="testc", b="testb", k="another_excess")

上記の例からわかるように、関数a, b, cのシグネチャにはパラメータしかありませんfoodkは存在しないため、これらは args 辞書に格納されます。プログラムの出力は次のようになります。

a = testa
b = testb
c = testc
{'k': 'another_excess', 'd': 'excess'}

例2:

# Excess positional argument (python 3) example:
def foo(a, b, c, *args):
    print("a = %s" % (a,))
    print("b = %s" % (b,))
    print("c = %s" % (c,))
    print(args)
        
foo("testa", "testb", "testc", "excess", "another_excess")

ここでは、位置引数をテストしているので、余分な引数は末尾に配置する必要があり、*argsタプルにパックされます。したがって、このプログラムの出力は次のようになります。

a = testa
b = testb
c = testc
('excess', 'another_excess')

辞書またはタプルを関数の引数に展開することもできます。

def foo(a,b,c,**args):
    print("a=%s" % (a,))
    print("b=%s" % (b,))
    print("c=%s" % (c,))
    print("args=%s" % (args,))

argdict = dict(a="testa", b="testb", c="testc", excessarg="string")
foo(**argdict)

プリント:

a=testa
b=testb
c=testc
args={'excessarg': 'string'}

そして

def foo(a,b,c,*args):
    print("a=%s" % (a,))
    print("b=%s" % (b,))
    print("c=%s" % (c,))
    print("args=%s" % (args,))

argtuple = ("testa","testb","testc","excess")
foo(*argtuple)

プリント:

a=testa
b=testb
c=testc
args=('excess',)

おすすめ記事