![](/img/trans.png)
[英]How to call a function with positional-only parameters given an arguments dictionary?
[英]How to implement "positional-only parameter" in a user defined function in python?
如何為用戶在 python 中定義的函數實現“僅位置參數”?
def fun(a, b, /):
print(a**b)
fun(5,2) # 25
fun(a=5, b=2) # should show error
更新:這個答案會越來越過時; 請參閱https://stackoverflow.com/a/56149093/1126841 。
唯一的解決方案是使用*
參數,如下所示:
def fun(*args):
print(args[0] ** args[1])
但這有其自身的問題:您不能保證調用者將提供恰好兩個參數; 您的函數必須准備好處理 0 或 1 個參數。 (忽略額外的參數很容易,所以我不會詳細說明這一點。)
在接受PEP 570之后,python 3.8 中添加了僅位置參數功能,然后在函數簽名的文檔中找到它以指示函數不接受任何關鍵字參數。
函數定義之前的參數在正斜杠 (/) 之前只是位置參數,斜杠 (/) 后面的參數可以是任何類型的語法。 其中參數僅根據調用函數時的位置映射到僅位置參數。 通過關鍵字(名稱)傳遞僅位置參數無效。
以下示例顯示僅具有位置參數的函數定義
def foo(a, b, / , x, y):
print("positional ", a, b)
print("positional or keyword", x, y)
在上面的函數定義中,參數 a 和 b 必須作為僅位置參數傳遞,而 x 或 y 可以是位置參數或關鍵字。
以下函數調用有效
foo(40, 20, 99, 39)
foo(40, 3.14, "hello", y="world")
foo(1.45, 3.14, x="hello", y="world")
以下函數調用將引發異常 TypeError,因為 a 和 be 作為關鍵字參數傳遞。
foo(a=1.45, b=3.14, x=1, y=4)
類型錯誤:foo() 得到了一些作為關鍵字參數傳遞的僅位置參數:'a, b'
通過在函數定義中添加正斜杠 (/) 作為最后一個參數,可以將函數定義為僅接受位置參數。
def pow(x, y, /):
return x ** y
在上面的函數定義中,所有參數(x 和 y)都是位置參數。 在這里,按名稱傳遞參數無效,這將導致 TypeError。
pow(2, 3); pow(3, 9)
pow(2, 3); pow(3, 9)
有效而pow(x=3, y=9)
無效,這將引發 TypeError
在Python Positional Only Parameters 中閱讀有關函數參數和僅位置參數類型的更多信息
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.