首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中使用函数对象的输入变量来构造新的函数对象吗?

在python中使用函数对象的输入变量来构造新的函数对象吗?
EN

Stack Overflow用户
提问于 2021-08-25 05:35:15
回答 1查看 37关注 0票数 0

我有一个function-object f,它接受4个数字输入并输出两个数字。也许吧

代码语言:javascript
复制
def  f(a, b, c, d):
    return a+b, c+d

或者也许

代码语言:javascript
复制
def  f(a, b, c, d):
    return a*c, d*c

需要说明的是,我实际上并不知道f是什么,我只是将它作为一个对象。

我想创建一个新的函数对象h,比如h(a,b,c,d)=x*c+y where (x,y)=f(a,b,c,d)。问题是,我不能直接访问c,只能访问f

代码语言:javascript
复制
def  make_h(f):
   ???
   return h

assert( make_h(f)(a,b,c,d) == f(a,b,c,d)[0]*c+f(a,b,c,d)[1])

有没有可能在python中做到这一点?我已经尝试搜索和阅读了一些文档,但没有找到答案(还没有?)。

编辑:当f的签名固定时,有一个简单的答案(如下所示)。假设我必须对不同的函数执行此操作,一些函数具有输入(a,b,c,d),一些函数具有输入(l,m,c),可能还有一些函数具有输入(c,r)。我还能做我想做的事吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-25 05:38:30

这个例子与装饰器的概念密切相关。我的解决方案如下:

代码语言:javascript
复制
def make_h(f):
   def h(a, b, c, d):
       x, y = f(a,b,c,d)
       return x * c + y
   return h

更新。如果f有任意数量的参数,我们可以使用args和kwargs。虽然这是一种糟糕的做法,但如果我们知道其中一个kwargs是c,我们可以使用以下代码:

代码语言:javascript
复制
def make_h(f):
   def h(*args, **kwargs):
       x, y = f(*args, **kwargs)
       return x * kwargs["c"] + y
   return h
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68917326

复制
相关文章

相似问题

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