2013-08-26 24 views
5

就讀自己變成再次角落...FUNC(* ARGS,** kwargs,x)的拋無效語法

def superfunction(*args, **kwargs, k): 
           ^
SyntaxError: invalid syntax 

請告訴我治林打破嗎?看起來你不應該將「常規」變量與*變量混合在一起,但我無法找到任何人確認或否認這一點。我讀過某處(現在我當然不能找到),有些類型的論據必須首先出現,我相信關鍵字論證,這可能是也可能不是我的問題的一部分。

+0

爲什麼這是錯誤的細節在Python 2.x和3.x之間稍有不同;請參閱教程部分[關鍵字參數](http://docs.python.org/2/tutorial/controlflow.html#keyword-arguments)和參考部分[函數定義](http://docs.python.org/ 2/reference/compound_stmts.html#function)爲您的相應版本提供詳細信息。但是簡單地說,'**'參數後面什麼也沒有。 – abarnert

+0

我也有一個[博客文章](http://stupidpythonideas.blogspot.com/2013/08/arguments-and-parameters.html)解釋了完整的細節;我不認爲這對新手友好......但我希望它至少比閱讀參考文檔更容易一些。 (但它是Python 3特有的。) – abarnert

回答

13

試試這個:

def superfunction(k, *args, **kwargs): 

**kwargs變量關鍵字參數必須是在函數聲明中的最後一部分。倒數第二位,*args變量位置參數。 (僅在Python 3.x中,您也可以在*args**kwargs之間具有關鍵字參數)。首先,位置參數 - 這是聲明函數參數的正確方法。看看這post瞭解更多詳情。

有關完整參考資料,請參閱Python 3.xPython 2.x中的函數定義部分。

+1

所以它的無名變量,名爲變量,*,** – jason

+0

我能得到它的唯一順序是def超函數(k,n = 2,* args,** kwargs):謝謝你讓我走上正軌。 – jason

+0

後續:def superfunction(k,n = 2,* args,* args2,** kwargs):擁有多個*類型參數也會引發語法錯誤。我想你只有一個? – jason

4

語法應該是這樣的:

def superfunction(k, *args, **kwargs): 

首先你給所有的位置參數,那麼非關鍵字參數,然後關鍵字參數。

+0

除了獲取參數和參數錯誤...非關鍵字參數和位置參數是相同的東西,所以這是混淆和錯誤的。 – abarnert

+0

正確的順序是:位置 - 或 - 關鍵字參數,然後可選'* args'(或'*',僅在Python 3.x中),然後(僅限於Python 3.x)關鍵字參數,然後是* * kwargs'。 – abarnert

+0

@abarnert啊!是嗎?我幾個月前讀過它,所以我似乎忘記了技術術語,因此混淆了。感謝您指出了這一點。 –

相關問題