在Python 3.8中,新增了一个函数形参语法/,用于指明函数形参必须使用指定位置参数,不能使用关键字参数的形式。这个特性可以帮助开发者更好地控制函数参数的传递方式。
语法解释
在函数定义中,/和*分别用于指定位置参数和关键字参数的分隔符:
/之前的参数必须使用位置参数传递。/之后,*之前的参数可以使用位置参数或关键字参数传递。*之后的参数必须使用关键字参数传递。
示例代码
以下是一个示例,展示如何使用/和*来定义函数参数:
def f(a, b, /, c, d, *, e, f):
print(a, b, c, d, e, f)
# 正确的调用方式
f(1, 2, 3, 4, e=5, f=6)
# 错误的调用方式
# f(a=1, b=2, c=3, d=4, e=5, f=6) # TypeError: f() got some positional-only arguments passed as keyword arguments: 'a, b'
详细解释
-
位置参数:
def f(a, b, /, c, d, *, e, f):a和b必须使用位置参数传递。- 例如:
f(1, 2, 3, 4, e=5, f=6)中,1和2是位置参数,分别传递给a和b。
-
位置或关键字参数:
def f(a, b, /, c, d, *, e, f):c和d可以使用位置参数或关键字参数传递。- 例如:
f(1, 2, 3, 4, e=5, f=6)中,3和4是位置参数,分别传递给c和d。
-
关键字参数:
def f(a, b, /, c, d, *, e, f):e和f必须使用关键字参数传递。- 例如:
f(1, 2, 3, 4, e=5, f=6)中,e=5和f=6是关键字参数,分别传递给e和f。
示例调用
# 正确的调用方式
f(1, 2, 3, 4, e=5, f=6) # 输出: 1 2 3 4 5 6
# 错误的调用方式
# f(a=1, b=2, c=3, d=4, e=5, f=6) # TypeError: f() got some positional-only arguments passed as keyword arguments: 'a, b'
总结
通过使用/和*,可以更好地控制函数参数的传递方式,确保某些参数必须使用位置参数传递,而其他参数可以使用关键字参数传递。这种方式可以提高代码的可读性和可维护性,避免参数传递错误。
177

被折叠的 条评论
为什么被折叠?



