vlambda博客
学习文章列表

函数式编程---匿名函数(lambda)

什么是lambda()函数

        Lambda表达式也叫匿名函数,即函数没有具体的名称。Lambda表达式是Python中一类特殊的定义函数的形式,使用它可以定义一个匿名函数。与其它语言不同,Python的Lambda表达式的函数体只能有单独的一条语句,也就是返回值表达式语句。Lambda语句构建的其实是一个函数对象。匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。

    当我们想要使用一个简单定义的,或者只需要调用一两次的函数时,取名就是一个比较麻烦的事

使用lambda()匿名函数可以省去这一步骤

普通函数

>>def Sum(x,y):

>>    return x+y

>>Sum(2,3)

匿名函数

>>Sum=lambda x,y:x+y        #冒号之前的是匿名函数的参数,冒号后面的是匿名函数的返回值

>>Sum(2,3)


#x是传入的参数

a = lambda x : x*10
print(a(1))#10

上述代码说明,lambda定义了一个匿名函数,将x作为传入参数,x*10作为函数体,用函数可以定义为:

def fun(x):
return x*10

print(fun(1))#10


lambda()可以与filter(),map()等函数一起使用:

#将range(10)以内的偶数过滤掉
a = list(filter(lambda x : x % 2,range(10)))#奇数余2的值为1,bool值为True,filter函数返回此元素
print(a)#[1, 3, 5, 7, 9]

#将range(10)以内的数*2保存到新列表
b = list(map(lambda x:x*2,range(10)))

print(b)#[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]


Lambda表达式的优点:

1、使用Python写一些执行脚本时,使用Lambda可以省去定义函数的过程,让代码更加精简。

2、对于一些抽象的,不会别的地方再复用的函数,有时候给函数起个名字也是个难题,使用Lambda不需要考虑命名的问题。

3、使用Lambda在某些时候让代码更容易理解。

Lambda表达式的缺点:

1. 若不用并行计算,很多时候计算速度没有比传统的 for 循环快(并行计算有时需要预热才显示出效率优势,并行计算目前对 Collection 类型支持的好,对其他类型支持的一般)。

2. 不容易调试。

3. 若其他程序员没有学过Lambda表达式,代码不容易让其他语言的程序员看懂。

4. 在Lambda语句中强制类型转换貌似不方便,一定要搞清楚到底是 map 还是 mapToDouble 还是 mapToInt。