我正在练习不同的函数签名,并想尝试一个具有所有这些功能的函数:位置参数和关键字参数,这些参数的数量可变,并且仅指定位置关键字参数。
到目前为止我得到了:
def fun(a, /, b, *, c=None, **kwargs):
print(f"{a = }, {b = }, {c = }")
其中
a
是仅位置参数,b
可以是位置参数或关键字,c
是仅关键字参数,并且允许使用其他关键字参数。
但是,当我尝试在
*args
中收集其他位置参数时,导致了语法错误。我认为 *args
的所有可能位置都经过测试。
是否无法同时使用所有
/
、*
、*args
和*kwargs
?或者也许我错过了一种可能性?
编辑
2023年8月14日发表文章:《Python星号和斜杠特殊参数有什么用?》 (真正的Python)
def foo(a, *args, b)
这里
a
是位置参数,args
吸收任何额外的位置参数,b
是关键字参数。在这里包含 *
绝对没有意义,因为它的唯一作用是终止位置参数和开始关键字参数。但*args
已经做到了。
您可以将
*
视为没有 *args
的 args
,这意味着额外的位置参数不会被吸收到参数中。除此之外,*
和*args
已经完成了相同的工作。这是有道理的,因为他们使用相同的“*
”。