接受两个函数并返回串联函数的 Python 函数?

标签 python function concatenation

我需要编写一个名为“concat”的 python 函数,它将任意两个函数作为输入,并返回一个函数,该函数是两个输入函数的串联函数(即它接受 f1 和 f2,并返回 f1◦f2 ).

我试过这个:

def concat(f1,f2):
    return f1(f2)

例如,如果 f1 和 f2 是:

def f1(x):
    return x+2
def f2(x):
    return x*2

然后,concat(f1,f2) 应该返回:(x*2)+2

我希望能够像这样使用它:

a = concat(f1,f2)
a(5)

但是我得到一个错误:

TypeError: + 不支持的操作数类型: 'function' 和 'int'

我知道我可以这样定义函数:

def concat(f1,f2,x): 
    return f1(f2(x))

但这不是我想要的;我希望能够创建 concat 函数的实例,然后可以用任何 x 调用它。

最佳答案

您需要返回一个新的“包装器”函数。一种选择是使用 lambda 表达式:

def concat(f1, f2):
    return lambda x: f1(f2(x))

文档: https://docs.python.org/3/tutorial/controlflow.html#lambda-expressions

关于接受两个函数并返回串联函数的 Python 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65531057/

相关文章:

c++ - 让函数返回字符串而不是整数不好吗? (C++)

Javascript 函数第一次未获取所有值

javascript - 如何在不创建新数组的情况下用另一个数组扩展现有 JavaScript 数组

python - 无法在图中添加图例

python - 从 App Engine 经济地删除数据

javascript - 在 Bokeh 服务器配置中如何从客户端浏览器获取 x,y 坐标到服务器

javascript - Angular 最佳实践 : Lazyload vs Concatenation

python - 在 Django Rest Framework 中验证 query_params

c++ - 使用后增量构造带有变量的整数对 std::pair

python - 将多个 CSV 文件导入 pandas 并连接到一个 DataFrame