【发布时间】:2021-03-28 09:40:08
【问题描述】:
Mathematica 有一个方便的 Nest 函数,用于重复评估 f(f(f(f(...f(n)))))。不是你每天都需要的东西,但偶尔有用。这是一个简单的实现:
def nest(f, expr, n):
assert n >= 0
if n == 0:
return expr
else:
return f(nest(f, expr, n - 1))
>>> nest(lambda x: (1 + x) ** 2, 1, 3)
676
有没有 Pythonic 的方式来做到这一点?
【问题讨论】:
-
你有什么问题?
-
一个更方便的方法可能是考虑使用
reduce模式。map/reduce模式可以很容易地分发,您的问题可以表示为reduce表达式(在更一般的方式上略有不同)。 -
这能回答你的问题吗? How to repeat a function n times;特别是this answer
-
另外this answer 到另一个问题建议
def compose(f, x, n): return functools.reduce( lambda x, _: f(x), range(n), x)
标签: python function recursion functional-programming wolfram-mathematica