Python中的匿名函数-lambda

jopen 10年前

简述


除了def语句之外,Python还提供了一种生成函数对象的表达式形式。这个表达式创建了一个之后能够调用的函数,但是它返回了一个函数而不是将这个函数赋值给一个变量名称。

lambda表达式


lambda的一般形式是关键字lambda,之后是一个或者多个参数,紧跟的是一个冒号,之后是一个表达式:
lambda argument1 argument2 ... :expression using arguments

lambda是一个表达式,而不是一个语句。

作为一个表达式,lambda返回了一个值,可以选择性地赋值给一个变量名。相反,def语句总是得在头部将一个新的函数赋值给一个变量名,而不是将这个函数作为结果返回。

lambda主体是一个单一的表达式,而不是一个代码块。


默认参数也能够在lambda参数中使用,就像在def中使用一样。
</div> </div> </div>
    >>>x = (lambda a = "fee", b = "fie", c = "foe": a + b +c)        >>>x("wee")        'weefiefoe'  

map函数


Python实际上提供了一个内置的工具,map函数。这个函数的主要功能是对一个序列对象中的每一个元素应用被传入的函数,并且返回一个包含了所有函数调用结果的一个列表。

</div> </div>
    >>>counters = [1,2,3]        >>def inc(x) :return x+10        ...        >>>list(map(inc, counters))        [11,12,13]  

</div>
由于map函数期待传入一个函数,它恰好是lamba通常出现的一个地方:
 
    >>>list(map(lambda x:x + 3), counters)  
返回值为14,15,16.</div>

为什么使用lambda


1. 使用Python写一些执行脚本时,使用lambda可以省去定义函数的过程,让代码更加精简。
2. 对于一些抽象的,不会别的地方再复用的函数,有时候给函数起个名字也是个难题,使用lambda不需要考虑命名的问题。
3. 使用lambda在某些时候让代码更容易理解。