如何实现lambda函数?

-3 投票
2 回答
1177 浏览
提问于 2025-04-18 15:37

我刚开始学习Python,之前编程也有几年经验。最近我才了解到lambda这个概念。

我想知道lambda函数在内存中是怎么工作的。一般来说,它们存储在电脑的哪个地方,怎么被调用呢?

它们会像内联函数那样吗?或者说,即使不会再被调用,它们也会有一个指针吗?

2 个回答

8

在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超出作用域或与最后的引用断开连接,它们就会变得可以被销毁和进行垃圾回收。具体何时发生取决于实现方式。

1

简单来说,lambda 是一种可以像函数一样被调用的 表达式

它是一种简写方式,用来写“临时函数”,这些函数在需要的时候可以用,但用完后就不再需要了。

就像Python中的其他东西一样,如果没有人再引用它,Python最终会把它清理掉(回收内存、垃圾回收等等)。具体怎么清理和什么时候清理,取决于你使用的Python版本。

不过,lambda 还是有一些好处的,因为它们是表达式,可以在一些普通方法无法使用的地方使用。

撰写回答