Python Lambda用法

时间:2014-12-09 19:57:40

标签: python lambda

我试图学习如何利用lambda函数,我遇到了一些困难。

来自HomeWork的例子。

我有以下功能

def square(x):
    return x**2

def incr(x):
    return x+1

我需要创建一个名为'repeated'的函数,它将采用上述函数之一+一个整数,并返回一些取决于函数调用IE的时间的值:

repeated (incr,4)(2)
6

repeated (square,2)(5)
625

使用'compose'功能。

def compose(f,g):
    return lambda x:f(g(x))

提前感谢您的解释。

2 个答案:

答案 0 :(得分:1)

如果你应该使用lambda,你可以使用这样的递归:

def repeated(func, times):
    return lambda x: repeated(func, times - 1)(func(x)) if times > 0 else x

repeated返回的是一个等待参数的函数x,然后它会在times上激活自己x次(描述性的)

当它不再自动激活时(换句话说,时间< = 0,它会停止并返回x 最后一次呼叫收到。

您可以按照以下相同的方式使用compose

如果您想使用compose,可以执行此操作:

def repeated(func, times):
    return compose(func, repeated(func, times-1)) if times > 0 else lambda x

这样做只需使用compose递归times - 1递归repeated次,直到不再需要作曲为止。

编辑:

Python的标准实现和递归相处得不太好,这两种解决方案都是正确的,但使用循环更加pythonic。另一个答案可以做到这一点。

答案 1 :(得分:0)

repeated也需要返回一个callable; compose()可以为您生成可调用的,但您需要多次应用它:

def repeated(f, count):
    callable = f
    for _ in range(count - 1):
        callable = compose(f, callable)
    return callable

因此,如果count1,则返回原始f()。对于count = 2,会返回f(f())等等。