CodeWalk

关键字参数和位置参数

作者:编译有声 · 2026-05-30 12:55

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=...)