我试图学习如何利用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))
提前感谢您的解释。
答案 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
因此,如果count
为1
,则返回原始f()
。对于count = 2
,会返回f(f())
等等。