可以使用functools中的partial函数在Python语言中创建一个分部函数,但是这样做通常会将一些参数更改为仅关键字参数。例如:
def foo(a, b, c, d):
return a*b - c*d
bar = functools.partial(foo, b=2, c=3)
inspect.signature(foo)
# <Signature (a, b, c, d)>
inspect.signature(bar)
# <Signature (a, *, b=2, c=3, d)>在本例中,参数a保留其原始kind,但d现在仅包含关键字。有没有一种方法可以将函数的参数绑定到某些值,同时保留其他参数的类型?换句话说,使上面的bar在功能上等同于:
def bar(a, d):
return a*2 - 3*d但是bar可以是任何函数,参数的任何组合都可以绑定。
发布于 2021-07-24 05:44:40
对于functools.partial,这是不可能的。类似的想法在Python-ideas邮件列表中被多次提出,参见例如here或here (也可以是this SO question)。我们的想法是跳过一些位置参数,所以在您的情况下,您可以这样做:
bar = partial(foo, SKIP, 2, 3)然而,这从来没有实现过,所以你今天不能使用它。
相反,您可以做的是将函数调用包装在另一个具有所需签名( lambda或“普通”函数)的函数中:
def bar(a, d):
return foo(a, 2, 3, d)另一种选择是要求函数的用户通过关键字传递参数。然而,如果没有一个真实的用例,就很难判断什么是最好的方法。
https://stackoverflow.com/questions/68504771
复制相似问题