如何使用所有这些:*args、**kwargs、“*”和“/”

问题描述 投票:0回答:1

我正在练习不同的函数签名,并想尝试一个具有所有这些功能的函数:位置参数和关键字参数,这些参数的数量可变,并且仅指定位置关键字参数。

到目前为止我得到了:

def fun(a, /, b, *, c=None, **kwargs):
    print(f"{a = }, {b = }, {c = }")

其中

a
是仅位置参数,
b
可以是位置参数或关键字,
c
是仅关键字参数,并且允许使用其他关键字参数。

但是,当我尝试在

*args
中收集其他位置参数时,导致了语法错误。我认为
*args
的所有可能位置都经过测试。

是否无法同时使用所有

/
*
*args
*kwargs
?或者也许我错过了一种可能性?

编辑

2023年8月14日发表文章:《Python星号和斜杠特殊参数有什么用?》 (真正的Python)

python arguments signature keyword-argument
1个回答
3
投票
def foo(a, *args, b)

这里

a
是位置参数,
args
吸收任何额外的位置参数,
b
是关键字参数。在这里包含
*
绝对没有意义,因为它的唯一作用是终止位置参数和开始关键字参数。但
*args
已经做到了。

您可以将

*
视为没有
*args
args
,这意味着额外的位置参数不会被吸收到参数中。除此之外,
*
*args
已经完成了相同的工作。这是有道理的,因为他们使用相同的“
*
”。

© www.soinside.com 2019 - 2024. All rights reserved.