Python是否有类似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

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))

有没有一种类似蟒蛇的方法可以做到这一点?

如果你喜欢这类事情,你可以研究一下:


谈到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