如何在Python中使用lambda迭代

如何在Python中使用lambda迭代,python,lambda,iterator,Python,Lambda,Iterator,谢谢你们。我发现我不能在网上发布我的问题 但是,它对我来说确实很有帮助。编写需要3个参数:编写函数、编写次数和初始参数。所以如果你想计算f(f(f(7)),你可以调用compose(f,3,7) 我突然想到也许这不是你想要的。也许您希望能够编写g=compose(f,3),然后调用g(7)。这只需要稍作修改: def compose(g, m): def composer(f, n, x): if n == 0: return x return compose

谢谢你们。我发现我不能在网上发布我的问题


但是,它对我来说确实很有帮助。

编写需要3个参数:编写函数、编写次数和初始参数。所以如果你想计算f(f(f(7)),你可以调用compose(f,3,7)

我突然想到也许这不是你想要的。也许您希望能够编写
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)

Compose需要3个参数:要编写的函数、编写的次数和初始参数。所以如果你想计算f(f(f(7)),你可以调用compose(f,3,7)

我突然想到也许这不是你想要的。也许您希望能够编写
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)

我不确定我是否理解正确,但我相信您希望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个

我不确定是否理解正确,但我相信您希望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)

使用索尔斯帕茨的作曲和lambda,你将得到32个

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

使用saulspatz的作曲和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

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

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

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

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

有什么代码可以显示吗?我感觉到一个。有什么代码可以显示吗?我感觉到一个。