如何在Python中使用lambda的迭代

时间:2015-10-07 02:35:09

标签: python lambda iterator

谢谢你们。我发现我无法在互联网上发布我的问题。

然而,这对我很有帮助。

4 个答案:

答案 0 :(得分:4)

撰写将需要3个参数:要编写的函数,编写它的次数以及初始参数。所以如果你想评估f(f(f(7)))你会调用compose(f,3,7)。

def compose(f, n, x):
   if n == 0: return x
   return compose(f, n-1, f(x))

我想到这可能不是你想要的。也许您希望能够编写g = compose(f, 3)然后拨打g(7)。这只需要稍作修改:

def compose(g, m):
    def composer(f, n, x):
       if n == 0: return x
       return compose(f, n-1, f(x))
    return lambda x: composer(g, m, x)

答案 1 :(得分:1)

我不确定我是否理解正确,但我相信你期望compose()返回一个函数。在这种情况下,这将起作用:

def compose(f, n):
   def composed_f(x):
      result = x

      for i in range(n):
         result = f(result)
      return result

   return composed_f

所以,如果你写:

a = compose((lambda x:x*2), 5)
print a(1)

你会得到32

答案 2 :(得分:0)

使用saulspatz的compose和lambda

cubed = lambda x: x**3

def compose(f, n, x):
   if n == 0: return x
   return compose(f, n-1, f(x))

print(compose(cubed,2,2))

512

答案 3 :(得分:0)

虽然这可以使用递归简洁地实现,但迭代解决方案更有效,并且不会因n的大值而中断。

def compose(f, n):
    def iterated_f(x):
        rv = x
        while n > 0:
            rv = f(rv)
        return rv
    return iterated_f