了解 python 中的嵌套 lambda 函数行为

新手上路,请多包涵

我正在尝试学习纯函数式编程。但是这段代码让我感到困惑,尤其是第二行。我不明白值 2 是如何传递给变量 x 的。有人可以解释这个嵌套 lambda 行为吗?

 >>> square_func = lambda x: x**2
>>> function_product = lambda F, m: lambda x: F(x)*m
>>> square_func(2)
4
>>> function_product(square_func, 3)(2)
12

原文由 kmario23 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 824
2 个回答

当调用外部 lambda 时,内部 lambda 会创建一个函数。外层 lambda 返回这个函数。然后使用参数 2 调用此函数。

原文由 Ignacio Vazquez-Abrams 发布,翻译遵循 CC BY-SA 3.0 许可协议

这是一种规则(或约定),如果您遵循样式指南,则 不要 在您使用的上下文中使用 lambda 。这样做的原因正是让你迷茫地转向互联网的原因。标志是:

  1. 您正在为 匿名 函数 命名
  2. 有多个 lambda 。对于没有嵌套匿名函数的语言,这是一种代码味道。 一定会有更好的办法

以这种方式编写并获得好处如何:

 def function_product(F, m):      # returns inner, a function
    def inner(x):                # takes x, and closes over F and m from
        return F(x)*m            # outer scope, hence a closure
    return inner

看,一切都清楚了,因为现在可读性更强了。避免 lambda ,也许回调除外,比如 sorted() 。普通函数是对象,就像 10hello 一样。

总是做 import this 。 :)

原文由 C Panda 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题