lambda
lambda关键字在Python表达式内创建匿名函数。但在lambda函数的定义体中不能复制,也不能使用while、try等语句,只能使用纯表达式。
- lambda只是一个表达式,函数体比def简单很多
- lambda的主体是一个表达式,而不是一个代码块,只能在lambda表达式中封装有限的逻辑进去
- lambda函数拥有自己的名字空间,且不能访问自有参数列表之外或者全局名字空间里的参数
- 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存,从而提升运行效率
lambda函数的一般语法非常简单,形式为:lambda argument_list:expression
参数由逗号分隔的参数列表组成,表达式是使用这些参数的算术表达式。可以将该函数分配给一个变量以赋予其名称。
例:
a = lambda x,y:x+y
print(a(3,4))
输出:
7
**
map
**
map是Python的高级函数,形式为:map(func,*iterables):第一个参数func是函数的名称,第二个参数为一个序列(例如一个列表),map将函数func应用于序列的所有元素。在Python3中,map返回一个迭代器。
例:
seq_list=[1,2,3 ,4]
F = list(map(lambda x:x**2,seq_list))
print(F)
输出
[1,4,9,16]
map可以应用于多个列表,列表不必具有相同的长度。map会将lambda函数应用于参数列表的元素,即它首先应用于具有第0个索引的元素,然后应用于具有第一个元素的索引,直到达到第n个索引。
例:
a = [1,2,3,4]
b = [5,6,7,8]
c = [5,6,7]
ab = list(map(lambda x,y:x+y,a,b))
ac = list(map(lambda x,y:x+y,a,c))
print(ab)
print(ac)
输出:
[6,8,10,12]
[6,8,10]
**
filter
**
filter也是Python的高级语言,为函数式编程提供便利。其作用是对序列中的元素进行筛选,最终获得符合条件的序列,其一般形式为:filter(function,iterable),函数提供了一个优雅的方式来过滤掉序列中的所有元素。
例:先滤出前11个斐波那契数列的奇数和偶数元素
fibonacci = [0,1,1,2,3,5,8,13,21,34,55]
even_number = list(filter(lambda x:x%2 ==0,fibonacci))
print(even_number)
输出:
[0,2,8,34]