如何实现lambda函数?
我刚开始学习Python,之前编程也有几年经验。最近我才了解到lambda这个概念。
我想知道lambda函数在内存中是怎么工作的。一般来说,它们存储在电脑的哪个地方,怎么被调用呢?
它们会像内联函数那样吗?或者说,即使不会再被调用,它们也会有一个指针吗?
2 个回答
在Python中,lambda
表达式基本上是写一行函数的简化方式。因为它通常和函数式编程风格有关,所以有些人对使用lambda感到不太舒服,他们更喜欢写出等效的短函数,并在代码中引用这些函数。
对于任何表达式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>"
。
像所有Python对象一样,一旦函数和lambda超出作用域或与最后的引用断开连接,它们就会变得可以被销毁和进行垃圾回收。具体何时发生取决于实现方式。
简单来说,lambda 是一种可以像函数一样被调用的 表达式。
它是一种简写方式,用来写“临时函数”,这些函数在需要的时候可以用,但用完后就不再需要了。
就像Python中的其他东西一样,如果没有人再引用它,Python最终会把它清理掉(回收内存、垃圾回收等等)。具体怎么清理和什么时候清理,取决于你使用的Python版本。
不过,lambda 还是有一些好处的,因为它们是表达式,可以在一些普通方法无法使用的地方使用。