函数self_compose(x,y)
将可调用语句x
和整数y
作为参数。
此函数然后返回另一个可调用函数,其结果是
让x
自称y
次
即
sc = self_compose (lambda x : x*3, 3) # => ( ( (x*3) * 3) *3 )
sc(2) # = 54
问题是如何在lambda中创建lambda而不必使用递归?
答案 0 :(得分:3)
实际上不需要递归或嵌套 lambdas ,你可以简单地定义 self_compose
,让它创建并返回一个简单的函数调用提供的回调 n
次。
def self_compose (cb, n):
def __worker (val):
for _ in range (n):
val = cb (val)
return val
return __worker
sc = self_compose (lambda x: x*3, 3)
if sc(2) == 54:
print ("SUCCESS")
SUCCESS
当然,您可以通过以下方式使用以下内容创建它:
from functools import partial, reduce
self_compose = lambda cb,n: partial (reduce, lambda v,cb: cb(v), [cb]*n)
if self_compose (lambda x: x+x, 3) ('B') == "BBBBBBBB":
print ("SUCCESS")
SUCCESS