lambda
Python中的表达式几乎是编写单行函数的简便方法.因为它往往与编程的功能样式相关联,所以有些人对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超出范围或者从上一次引用中解除绑定,它们就有资格进行销毁和垃圾回收.何时发生取决于实施.