web-dev-qa-db-ja.com

Python、可変長の位置引数の後のデフォルトのキーワード引数

Python 2の関数呼び出しで可変長の位置パラメーターの後に名前付きパラメーターを使用できると考えましたが、pythonクラスをインポートするときにSyntaxErrorを取得します。たとえば、次の「get」メソッドを使用して記述しています。

class Foo(object):
    def __init__(self):
        print "You have created a Foo."

    def get(self, *args, raw=False, vars=None):
        print len(args)
        print raw
        print vars

エラーは次のようになります。

def get(self, *args, raw=False, vars=None):
                     ^
SyntaxError: invalid syntax

メソッドをいくつかの方法で呼び出すことができます。

f = Foo()
f.get(arg1, arg2)
f.get(arg1, raw=True)
f.get(arg1, arg2, raw=True, vars=something)

等.

77
jkmacc

Pythonの構文では、関数内の変数引数とデフォルト値を持つキーワード引数を同時に使用できません。キーワード引数と任意の数の位置引数が必要な場合は、任意の数のキーワード引数も許可する必要があります。

これは、キーワード引数のデフォルト値を提供し、任意の数の位置引数を許可する一般的なパターンです。

def foo(*args, **kwargs):
   raw = kwargs.pop('raw', False)
   vars = kwargs.pop('vars', None)

余分なキーワード引数をまったく使用しない場合、心配する必要はありません。これにより、関数の自己文書化が少し少なくなり、適切に記述されたdocstringで補うことができます。

47
Imran