Pythonでは、次のように関数を定義できます。
def func(kw1=None,kw2=None,**kwargs):
...
この場合、私は次のように呼び出すことができますfunc
:
func(kw1=3,kw2=4,who_knows_if_this_will_be_used=7,more_kwargs=Ellipsis)
関数を次のように定義することもできます。
def func(arg1,arg2,*args):
...
これは次のように呼ぶことができます
func(3,4,additional,arguments,go,here,Ellipsis)
最後に、2つの形式を組み合わせることができます
def func(arg1,arg2,*args,**kwargs):
...
しかし、機能しないのは次のことです。
func(arg1,arg2,*args,kw1=None,kw2=None,**kwargs): #SYNTAX ERROR (in Python 2 only, apparently this works in Python 3)
...
私の当初の考えは、これはおそらく関数のためだと思っていました
def func(arg1,arg2,*args,kw1=None):
...
と呼ぶことができます
func(1,2,3) #kw1 will be assigned 3
args
したがって、これにより、3をパックするか、にパックするかについて、あいまいさが生じkwargs
ます。ただし、Python 3では、キーワードのみの引数を指定する機能があります。
def func(a,b,*,kw=None): # can be called as func(1,2), func(1,2,kw=3), but NOT func(1,2,3)
...
これにより、次の構文のあいまいさはないようです。
def func(a,b,*args,*,kw1=None,**kwargs):
...
ただし、これでも構文エラーが発生します(Python3.2でテスト済み)。私が行方不明になっている理由はありますか?そして、上記で説明した動作を取得する方法はありますか(デフォルトの引数を使用)-関数内の辞書を*args
操作することで、その動作をシミュレートできることを知っています。kwargs