我一直在試圖理解Python爲函數參數賦值時所遵循的算法,它只是非常混亂。我想更好地理解算法,以便我可以真正知道將什麼值分配給哪些參數以及何時分配。有位置參數,關鍵字參數,* args,* kwargs和僅關鍵字參數。這些全部如何分配以及按什麼順序分配?將值分配給函數參數時,Python遵循的過程是什麼?
看看下面的代碼片段爲一個具體的例子:
def func(a, b, c):
print(a, b, c)
如果我撥打以下格式此功能,它會正常運行:如果我運行它
func(c=3, *(1, 2)) # prints 1 2 3
然而使用此,它提供了SyntaxError
:
func(c=3, 1, 2)
如何是次的兩種形式電話不同?在第一次調用中,元組被解包成單獨的參數。與轉換成第二種形式不一樣嗎?如果這就是發生了什麼,那麼第二種形式也應該起作用,但事實並非如此。
那麼這裏究竟發生了什麼?
但*爲什麼*不是有效的語法?它可以只分配關鍵字參數,然後將其餘的值分配給任何空白參數,就像我在示例中爲第二個呼叫類型所做的那樣。 –
因爲這就是Pythons語言的語法。解包參數與傳遞位置參數不同。 – MSeifert
@AsadMoosvi我更新了答案。我認爲原來的答案錯過了這一點。感謝您的評論 :) – MSeifert