【问题标题】:Python lambda self composing function: How to return a function that is repeated n amount of times?Python lambda自组合函数:如何返回重复n次的函数?
【发布时间】:2016-01-01 02:24:23
【问题描述】:

函数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?

【问题讨论】:

  • 为什么你认为这两件事都是必要的?
  • @jonrsharpe 至于为什么会有什么东西?拉姆达斯?理解 lambda 如何与函数 arg 抓取结合使用是作业的一部分。

标签: python python-3.x lambda iteration


【解决方案1】:

可读的替代方案

实际上不需要递归或嵌套 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

【讨论】:

  • 天哪,这就是我不明白的!我尝试使用返回可调用函数的 for 循环,但我不知道如何实现它。我对如何在函数中收集参数有一个模糊的理解!
猜你喜欢
  • 1970-01-01
  • 2019-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-27
  • 1970-01-01
  • 2018-05-12
相关资源
最近更新 更多