python - 如何多次组合函数?

标签 python function

我应该编写一个代码来获取一个数学函数和一个数字,并给我一个由 n 次组合而成的函数作为输出。

例如,如果 n=3,我会得到 f(f(f(x)))

当我运行我的代码时出现错误,我应该修复什么?

运行示例:

>>> repeated(lambda x:x*x, 2)(5)
624
>>> repeated(lambda x:x*x, 4)(3)
43046721

这是我的代码:

def repeated(f, n):
    g=f
    for i in range(n):
        g=lambda x: (g(g(x)))
    return (g)

最佳答案

返回一个新函数,该函数仅在调用时执行重复应用:

def repeated(f, n):
    def repeat(arg):
        return reduce(lambda r, g: g(r), [f] * n, arg)
    return repeat

reduce() 方法使用 f 函数引用列表来创建正确数量的嵌套调用,以 arg 作为开始第一个参数。

演示:

>>> def repeated(f, n):
...     def repeat(arg):
...         return reduce(lambda r, g: g(r), [f] * n, arg)
...     return repeat
... 
>>> repeated(lambda x:x*x, 2)(5)
625
>>> repeated(lambda x:x*x, 4)(3)
43046721

不使用 reduce() 的版本是:

def repeated(f, n):
    def repeat(arg):
        res = arg
        for _ in range(n):
            res = f(res)
        return res
    return repeat

关于python - 如何多次组合函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22921626/

相关文章:

android - 将 TensorFlow python 代码与 android 应用程序一起使用

python - 为什么有些 Python 标准库是用 .so 编写的,而大多数其他库是用 .py 编写的?

c - 将 char 指针数组传递给函数

jquery - 事件源 FullCalendar

function - 有或没有类型注释会发生特化吗?

r - 在 r 中使用带有辅助函数错误的 "by"

python - 将列表拆分为单独但重叠的 block

python - Pandas - 使用 str.contains 来匹配字符串

c# - 是否可以从 Python 调用 Entity Framework 数据访问程序集?

c - 返回 int array[] 或指向 int array[] 的指针返回到 C 中调用例程的函数