lambda函数是如何实现的?

Boh*_*ung -3 python memory lambda function

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

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

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

hol*_*web 8

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

对于任何表达,expr(a, b, ...)那么f = lambda: a, b, ... : expr(a, b, ...)就等于

def f(a, b, ...):
    return expr(a, b, ...)
Run Code Online (Sandbox Code Playgroud)

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

from dis import dis

flambda = lambda a, b: a + b

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

dis(flambda)
print "-------------"
dis(ffunction)
Run Code Online (Sandbox Code Playgroud)

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

  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        
Run Code Online (Sandbox Code Playgroud)

这两个对象都是类型的<type function>,只能通过检查一些不起眼的属性来区分,例如.func_name,对于ffunction"ffunction"而言,flambda它是对的"<lambda>".

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