首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >创建部分函数,但保留结果函数中的参数类型

创建部分函数,但保留结果函数中的参数类型
EN

Stack Overflow用户
提问于 2021-07-24 04:31:47
回答 1查看 58关注 0票数 4

可以使用functools中的partial函数在Python语言中创建一个分部函数,但是这样做通常会将一些参数更改为仅关键字参数。例如:

代码语言:javascript
运行
复制
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在功能上等同于:

代码语言:javascript
运行
复制
def bar(a, d):
    return a*2 - 3*d

但是bar可以是任何函数,参数的任何组合都可以绑定。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-24 05:44:40

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

代码语言:javascript
运行
复制
bar = partial(foo, SKIP, 2, 3)

然而,这从来没有实现过,所以你今天不能使用它。

相反,您可以做的是将函数调用包装在另一个具有所需签名( lambda或“普通”函数)的函数中:

代码语言:javascript
运行
复制
def bar(a, d):
    return foo(a, 2, 3, d)

另一种选择是要求函数的用户通过关键字传递参数。然而,如果没有一个真实的用例,就很难判断什么是最好的方法。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68504771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档