lambda函数是如何实现的?

时间:2014-08-01 06:52:21

标签: python function memory lambda

我是python的新手新手,编码了几年。 我刚认识了lambda。

我想知道lambda函数在内存方面是如何工作的。 通常它们存储在计算机存储器中的哪个位置以及它们如何被称为?

它们会变得像在线功能吗?或者他们有一个指针,即使他们不会再被调用。

2 个答案:

答案 0 :(得分:8)

Python中的lambda表达式几乎是编写单行函数的简便方法。因为它往往与编程的功能样式相关联,所以有些人对lambdas感到不舒服,更喜欢编写等效的短函数并在代码中使用对这些函数的引用。

对于任何表达式expr(a, b, ...)f = lambda: a, b, ... : expr(a, b, ...)

非常接近
def f(a, b, ...):
    return expr(a, b, ...)

您可以使用dis模块对每个编译的Python字节码进行反汇编以进行比较,如下所示。

from dis import dis

flambda = lambda a, b: a + b

def ffunction(a, b):
    return a + b

dis(flambda)
print "-------------"
dis(ffunction)

这个简单程序的输出表明编译的字节码完全相同。

  3           0 LOAD_FAST                0 (a)
              3 LOAD_FAST                1 (b)
              6 BINARY_ADD          
              7 RETURN_VALUE        
-------------
  6           0 LOAD_FAST                0 (a)
              3 LOAD_FAST                1 (b)
              6 BINARY_ADD          
              7 RETURN_VALUE        

这两个对象都是<type function>类型,只能通过检查.func_name等一些模糊属性来区分,ffunction"ffunction"flambda"<lambda>"是{{1}}。

与所有Python对象一样,一旦函数和lambdas超出范围或者从上一次引用中解除绑定,它们就有资格进行销毁和垃圾回收。何时发生取决于实施。

答案 1 :(得分:1)

一个简单的解释:lambda是一个表达式,可以作为函数调用。

它是编写“临时函数”的简写方法,可以在需要时使用,但之后不再需要。

就像Python中的任何其他内容一样,如果没有对它的引用 - Python最终将摆脱它(回收内存/垃圾收集/等)。如何以及何时执行此操作会因Python的实现而异。使用

lambda有一些优点,因为它们是表达式,可以在普通方法不能使用的地方使用。