函数式编程---匿名函数(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*10print(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。