1. ホーム
  2. python

[解決済み] Pythonでアスタリスク*は何を意味するのですか?[重複しています]。

2022-03-16 12:02:39

質問

Pythonでは*はC言語のように特別な意味を持つのでしょうか?Python Cookbookでこんな関数を見かけました。

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

Googleは*をワイルドカード文字と解釈しているため、満足のいく答えが見つかりません)説明していただくか、どこで答えを見つけられるかご指摘ください。

どのように解決するのですか?

参照 機能定義 言語リファレンスにあります。

もし、フォーム *identifier は が存在する場合、それはタプルとして初期化されます。 余分な位置指定があれば パラメータがあり、デフォルトは空の タプルです。もし、フォーム **identifier は が存在する場合、それは新しい 辞書は、余分な キーワード引数、デフォルトは新しい 空の辞書

また 機能呼び出し .

位置引数とキーワード引数の意味を理解した上で、いくつかの例を挙げてみましょう。

例1:

# Excess keyword argument (python 2) 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 のシグネチャで foo 関数を使用します。このため dk が存在しない場合、それらは args 辞書に入れられる。プログラムの出力は

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

例2:

# Excess positional argument (python 2) 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',)