关键字参数和位置参数
Python 3 中如何定义只接受关键字参数的函数?/ 和 * 在函数参数中的作用是什么?
回答
编译有声
Python 3.8+ 引入了参数分隔符:
/之前:只能是位置参数(positional-only)*之后:只能是关键字参数(keyword-only)- 两者之间:可位置可关键字
def func(a, b, /, c, d, *, e, f):
"""
a, b: 只能位置传递
c, d: 位置或关键字
e, f: 只能关键字传递
"""
pass
func(1, 2, 3, d=4, e=5, f=6) # 合法
func(1, 2, c=3, d=4, e=5, f=6) # 合法
func(a=1, b=2, 3, 4, e=5, f=6) # 错误:a,b 不能关键字传递
这在库 API 设计中很实用,如 len(obj) 不接受 len(obj=...)。