【问题标题】:Concatenation of Lambda functions in Python 3Python 3 中 Lambda 函数的串联
【发布时间】:2019-06-24 09:42:49
【问题描述】:

我得到以下代码:

two_to_one = lambda g: (lambda y: g(y, y))
one_to_two = lambda f: (lambda x, y: f(x)+f(y))
h=one_to_two(two_to_one (lambda x, y: x*y))
print (h(3, 2)) #prints 13

但是,我被困在如何调试整个事情上,我不太明白为什么它会打印 13。这只是一个脑筋急转弯问题,但我很想了解如何解决它正确的方式!

【问题讨论】:

  • 您应该尝试使用调试器并单步执行代码。

标签: python-3.x lambda


【解决方案1】:

为了理解这一点,你必须分析它的作用:

  • two_to_one = lambda g: (lambda y: g(y, y)) 是一个装饰器函数,它将函数g 转换为一个接受一个参数的函数。你给这个参数的参数被使用了两次。
  • one_to_two = lambda f: (lambda x, y: f(x)+f(y)) 是一个装饰器函数,它将函数g 转换为一个接受两个参数的函数。您为这些参数提供的参数分别用于函数调用,并添加结果。
  • lambda x, y: x*y 接受两个参数并返回它们的产品。

分析完这个,让我们看看会发生什么:

  • two_to_one(lambda x, y: x*y) 给出了一个函数,它返回给定值的平方。为什么?因为它本质上是lambda x: x*x
  • h,如上定义,等价于lambda x, y: x*x + y*y
  • h(3, 2) 因此返回 3 * 3 + 2 * 2 = 9 * 4 = 13。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-12
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多