Python是否有类似Mathematica的“嵌套”函数?
Mathematica有一个方便的函数,可以反复计算Python是否有类似Mathematica的“嵌套”函数?,python,function,recursion,functional-programming,wolfram-mathematica,Python,Function,Recursion,Functional Programming,Wolfram Mathematica,Mathematica有一个方便的函数,可以反复计算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)) 有没有一种类似蟒蛇的方法可以做到这一点?如果你喜欢这类事情,你可以研究一下: 谈到Pytho
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))
有没有一种类似蟒蛇的方法可以做到这一点?如果你喜欢这类事情,你可以研究一下:
谈到Pythonic,这是一个基于观点的概念,我想说一个简单的迭代实现比基于
reduce
的或递归的方法更具可读性()
def nest(f, expr, n):
for _ in range(n):
expr = f(expr)
return expr
当然,我不必像在其他案件中那样盯着这里发生的事情。但是,如果您追求的是简洁,则可以使用条件表达式:
def nest(f, expr, n):
return f(nest(f, expr, n - 1)) if n else expr
你有什么不对?更方便的方法可能是考虑使用<代码> Reals模式。
map/reduce
模式可以很容易地分布,您的问题可以表示为reduce
表达式(在更一般的方式上略有不同)。这是否回答了您的问题;特别是对于一个不同的问题,我建议def compose(f,x,n):return functools.reduce(lambda x,f(x),range(n,x)
。我给出了一个reduce
答案,作为一个有点开玩笑的评论。事实上,我喜欢Guido自己写的这封信(注明日期,但有关联)。(同时,为我辩护,十多年来,我一直在为PB级问题开发map reduce算法,这让我伤痕累累——不过我承认这很有趣)。我的意思是没有批评(你的一个问题来自我)。我喜欢在那里创造性地使用reduce
。如果OP是那种功能性伏都教,它可能正是他们的拿手好戏=)
>>> nest(lambda x: (1 + x) ** 2, 1, 3)
676
def nest(f, expr, n):
for _ in range(n):
expr = f(expr)
return expr
def nest(f, expr, n):
return f(nest(f, expr, n - 1)) if n else expr