2013-01-13 20 views
85

関数の引数の中の何もないアスタリスクは何をしますか?私が知っている(http://docs.python.org/3.3/library/pickle.html#pickle.dump)Pythonの関数アスタリスクが関数の引数にある

pickle.dump(obj, file, protocol=None, *, fix_imports=True) 

:私はpickleモジュールを見たとき

、私はこれを参照してください引数に先行する単一のアスタリスクとアスタリスクをダブルアスタリスク(可変引数の数に対して)ですが、これは何も先行しません。そして、私はこれがピクルスとは何の関係もないと確信しています。これはおそらくこの事件の例です。私は通訳にこれを送ったときにその名前を学んだだけです:

>>> def func(*): 
...  pass 
... 
    File "<stdin>", line 1 
SyntaxError: named arguments must follow bare * 

私はPython 3.3.0を使っています。

答えて

85

*は、呼び出し元に名前付き引数を使用させるために使用されます。したがって、次のキーワード引数がない場合は、*という関数を引数として定義することはできません。

詳細はthis answerまたはPython 3 documentationを参照してください。

+0

'* args'を含むすべての位置指定されていない引数は、' * 'の前に必ず現れなければならないことに注意してください。 – BallpointBen

17

元の回答は完全に質問に答えていますが、ちょっとした関連情報を追加するだけです。単一のアスタリスクの動作はPEP-3102に由来します。関連セクション引用:

The second syntactical change is to allow the argument name to 
be omitted for a varargs argument. The meaning of this is to 
allow for keyword-only arguments for functions that would not 
otherwise take a varargs argument: 

    def compare(a, b, *, key=None): 
     ... 

簡単な英語では、それはキーの値を渡すことを意味し、明示的key="value"としてそれを渡す必要があります。

関連する問題