在Python中,我可以如下定義一個函數:調用帶有* ARGS一個Python函數,** kwargs和可選/默認參數
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)
...
我最初的想法是,這可能是因爲功能
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): #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測試)。這是我有遺漏的原因嗎?而且,有沒有辦法讓我在上面(有使用默認參數*參數)描述的行爲 - 我知道我可以通過操縱函數內部的kwargs字典模仿這種行爲。
不知道爲什麼你得到「def func(arg1,arg2,* args,kw1 = None,kw2 = None,** kwargs)」的語法錯誤:「 – okm 2012-03-26 13:56:56
@okm因爲我沒有在python 3上測試該版本,只有python 2.我只是假定最終版本會起作用,而當它沒有時,我認爲以前的版本也不起作用。謝謝!。 – mgilson 2012-03-26 14:03:17
裸露的'3'應該如何進入'kwargs'?它會使用什麼關鍵字?我看不出任何含糊之處。請注意,參數列表中的'*'僅在沒有'* args'的情況下才有用。這是一個佔位符,您可以使用*而不是* * args'。 – 2012-03-26 14:45:20