2010-11-29 11 views
73

これらの関数の種類はどこで使用されているのか、これらの引数は通常の引数とどのように異なるのか分かりません。私は彼らに何度も遭遇しましたが、それらを正しく理解するチャンスはありませんでした。アスタリスクとデュアルアスタリスクで始まるPythonメソッド/関数の引数

例:

def method(self, *links, **locks): 
    #some foo 
    #some bar 
    return 

私は私がドキュメントを検索するかもしれない知っているが、私は何を検索する見当がつかない。

+2

前の質問を参照してください:http://stackoverflow.com/questions/287085/what-does-args-and-kwargs-mean – pyfunc

+0

ここには役立つリンクがあります:http://www.saltycrane .com/blog/2008/01/how-to-use-args-and-kwargs-in-python/ – user798719

+11

「私はドキュメントを検索できたかもしれないが、何を検索するのか分からない。学習するときにあまりにも頻繁に起こります。 「それは何のことなの?」と言っていただろう。何人かのいわゆる「エキスパート」が忘れるのは、時には、最低限の理解が必要なことです。 – monsto

答えて

115

フォームは、それぞれ引数のリストと引数の辞書を渡すために使用されます。だから私はこのような機能を持っていた場合:

def printlist(*args): 
    for x in args: 
     print(x) 

が、私はこのようにそれを呼び出すことができます。リストのようなこの

def printdict(**kwargs): 
    print(repr(kwargs)) 

printdict(john=10, jill=12, david=15) 

*args振る舞いについては

printlist(1, 2, 3, 4, 5) # or as many more arguments as I'd like 

、など**keywordargs振舞います関数に明示的にlistまたはdictを渡す必要はありません。

詳細については、thisを参照してください。

+3

しかし、明示的に関数にリストや辞書を渡すことはできますか? – User

+0

はい、できます。あなたが "そのまま"渡すなら、リストはargs [0]になります。一方、ファンクションをアスタリスクで呼び出すと(関数定義のものではなく、これが呼び出されます)、渡されたリストは実際のargsタプルになります。 –

+0

* argsは 'tuple'であり、' list'ではありません。 – AljoSt

関連する問題