一 lambda函数的定义
lambda表达式格式:
lambda [arg1 [, arg2, ... argN] ] : expression |
Python用lambda关键字创建匿名函数。(匿名是因为不需要以标准的方式来声明,比如说,使用def语句)
在看lambda的例子之前,先复习下单行语句:
def true():
return True
Python中单行函数可以和标题写在同一行。下面重写true()函数,以使其看起来像如下的东西:
def true(): return True
true()函数,使用lambda的等价表达式(没有参数,返回一个true)为:
lambda :True
二 lambda函数的调用
true()函数的用法很简单,即true()。但lambda不是这样。若是直接用"lambda : True",那该函数就只是进行无目的服务,正如:
>>> lambda:True
<function <lambda> at 0x0000020DDCCB7510>
>>> lambda:True
<function <lambda> at 0x0000020DDCCC0840>
在上面的每个例子中,只是简单地用lambda创建了一个函数(对象),但是既没有在任何地方保存它,也没有调用它。因为没有引用保存下来,所以被垃圾回收掉。
为了保留住这个对象,需要将其保存到一个变量中,以后可以随时用。如下:
>>> true = lambda : True
>>> true()
True
三 lambda实践
设计一个带两个数字或字符串参数,返回数字之和或者已拼接的字符串的函数。默认以及可变的参数也是允许的,如下例所示:
def Add2(x , y = 2) : return x + y lambda x , y = 2 : x + y
def showAllAsTuple(*z) :return z lambda *z : z
使用演示:
>>> a = lambda x,y=2:x+y
>>> a(3)
5
>>> a(3,5)
8
>>> a(0)
2
>>> a(0,9)
9
>>> b = lambda *z : z
>>> b(23,'zyx')
(23, 'zyx')
>>> b(35)
(35,)
lambda表达式运作起来就像一个函数,当被调用时,创建一个框架对象。
参考《Python核心编程(第二版)》