我应该编写一个代码来获取一个数学函数和一个数字,并给我一个由 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/