python - 创建偏函数,但保留结果函数中的参数类型

标签 python signature partial

可以使用 partial 在 python 中创建部分函数函数来自 functools ,但是这样做通常会将某些参数更改为仅关键字参数。例如:

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现在是关键字。有没有办法将函数的参数绑定(bind)到某些值,同时保留其他参数的类型?换句话说,一种制作 bar 的方法从上面功能上等同于:
def bar(a, d):
    return a*2 - 3*d
但是 bar可以是任何函数,并且可以绑定(bind)任何参数组合。

最佳答案

这是不可能的 functools.partial .在 Python-ideas 邮件列表中多次提出了类似的想法,参见例如herehere (还有 this SO question )。这个想法是跳过一些位置参数,所以在你的情况下你可以这样做:

bar = partial(foo, SKIP, 2, 3)
然而,它从未实现,所以你今天不能使用它。
您可以做的是将您的函数调用包装在另一个具有所需签名的函数中(lambda 或“正常”函数):
def bar(a, d):
    return foo(a, 2, 3, d)
另一种选择是要求函数的用户通过关键字传递参数。然而,如果没有真正的用例,很难判断什么是最好的方法。

关于python - 创建偏函数,但保留结果函数中的参数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68504771/

相关文章:

python - Anaconda 提示立即关闭——系统无法找到指定的注册表项或值

java - 验证 (PDF/PKI) 签名的必要步骤

ruby-on-rails - 重新加载部分(Rails Ajax)

python - 无法将信息传递给回调函数

python - 在python中替换字符串中的2个字符

python - 使用临时变量存储 super 返回值时出现奇怪的 super() 返回行为

python - 抓取谷歌网络结果不起作用

android - 如何获取 APK 签名签名?

azure - 将 Azure CDN 与共享访问签名结合使用

php - Symfony 包含来自自定义文件夹的部分内容