我一直無法找到一個可以參考的好地方來幫助自己理解 python 3.8 或 + 中的通用函數簽名。我想了解一種通用語法,其中包括僅位置、僅關鍵字、*args、**kwargs 等。我能夠推理一切,但我似乎無法將 *args 放入通用簽名中。def inc(a:int, b:int,/, c:int=10, d:int=5, *, e:int=15,f:int=3, **kwargs) -> int:
return None在這里,無論我將 *args 放在哪里,它都會引發語法錯誤。我可以刪除,*,(僅在該指示符之后的關鍵字),然后 *args 似乎很適合你能幫我理解 *args 如何與函數簽名的僅位置元素和僅關鍵字元素相匹配,以及 python 函數的一般語法應該是什么樣子嗎
2 回答

MMTTMM
TA貢獻1869條經驗 獲得超4個贊
您不能同時使用 varargs 參數和特殊*
參數來指示位置參數后面的僅關鍵字參數。PEP-3102引入了僅關鍵字語法,表示:
第二個語法更改是允許省略 varargs 參數的參數名稱。其含義是允許函數使用僅關鍵字參數,否則不會采用 varargs 參數。
(強調我的)。
您可以擁有*
或*args
,但不能同時擁有兩者。特殊參數的要點*
是,當您還沒有 varargs 參數時,允許您擁有僅關鍵字參數。

慕勒3428872
TA貢獻1848條經驗 獲得超6個贊
*
不是“僅在此指示符之后的關鍵字”。**
參數后面列出的非參數*
僅是關鍵字。例如,在以下函數中:
def f(*args, x): ...
x
僅限關鍵字。
如果您不希望函數采用*args
,則可以使用 bare*
來標記僅關鍵字參數的開始,但如果您確實想要*args
,則僅關鍵字參數將在其后。
添加回答
舉報
0/150
提交
取消