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)
等.
Pythonの構文では、関数内の変数引数とデフォルト値を持つキーワード引数を同時に使用できません。キーワード引数と任意の数の位置引数が必要な場合は、任意の数のキーワード引数も許可する必要があります。
これは、キーワード引数のデフォルト値を提供し、任意の数の位置引数を許可する一般的なパターンです。
def foo(*args, **kwargs):
raw = kwargs.pop('raw', False)
vars = kwargs.pop('vars', None)
余分なキーワード引数をまったく使用しない場合、心配する必要はありません。これにより、関数の自己文書化が少し少なくなり、適切に記述されたdocstringで補うことができます。