我是python的新手新手,编码了几年。 我刚认识了lambda。
我想知道lambda函数在内存方面是如何工作的。 通常它们存储在计算机存储器中的哪个位置以及它们如何被称为?
它们会变得像在线功能吗?或者他们有一个指针,即使他们不会再被调用。
答案 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有一些优点,因为它们是表达式,可以在普通方法不能使用的地方使用。