Python lambda自组合函数:如何返回重复n次的函数?

时间:2015-10-04 08:25:41

标签: python python-3.x lambda iteration

函数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而不必使用递归?

1 个答案:

答案 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