正斜杠(/)表示之前的所有参数都是位置唯一的参数。在接受PEP 570之后,在python 3.8中添加了仅位置参数功能。最初,此表示法是在PEP 457-仅位置参数表示法中定义的
在函数定义中,Foraward斜杠(/)之前的参数仅是位置参数,后跟斜杠(/)的参数根据语法可以是任何种类。仅在调用函数时根据参数的位置将参数映射到仅位置参数。通过关键字(名称)传递仅位置参数无效。
让我们来看下面的例子
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,b没有作为位置参数传递,而是作为关键字传递
foo(a=1.45, b=3.14, x=1, y=4)
TypeError:foo()获得了一些仅位置参数作为关键字参数传递:'a,b'
python中的许多内置函数仅接受位置参数,而按关键字传递参数没有意义。例如,内置函数len仅接受一个positional(only)参数,如果将len调用为len(obj =“ hello world”)会损害可读性,则检查help(len)。
>>> help(len)
Help on built-in function len in module builtins:
len(obj, /)
Return the number of items in a container.
仅位置参数使基础c /库函数易于维护。它允许将来仅更改位置参数的参数名称,而不会破坏使用API的客户端代码的风险
最后但并非最不重要的一点是,仅位置参数允许我们使用其名称在可变长度关键字参数中使用。检查以下示例
>>> def f(a, b, /, **kwargs):
... print(a, b, kwargs)
...
>>> f(10, 20, a=1, b=2, c=3) # a and b are used in two ways
10 20 {'a': 1, 'b': 2, 'c': 3}
仅位置参数比较好此处在python中的函数参数类型中进行了解释:仅位置参数
仅位置参数语法已正式添加到python3.8中。签出python3.8的新功能-仅位置参数
与PEP相关:PEP 570-Python仅位置参数
/
令牌是因为“这是的逆运算*
”,表明Python有点疯狂。这是一种联觉。