在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)
最后,我可以将这两种形式结合起来
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)
...
我最初的 idea 是,这可能是因为一个函数
def func(arg1,arg2,*args,kw1=None):
...
可称为
func(1,2,3) #kw1 will be assigned 3
因此,这将引入一些模糊性,即3应该被打包成args
还是kwargs
.但是,在Python 3中,可以指定仅限关键字的参数:
def func(a,b,*,kw=None): # 可称为 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
字典来模拟这种行为.