声明:在本篇文章中的语法都为python3版本的语法。
lambda表达式的基本用法
a=lambda x:x**2
print(a(3))
输出:
9
等价于
def a(x):
return x**2
print(a(3))
输出:
9
lambda表达式与高阶函数的配合
Map函数
Map函数:
map(function,iterable,..)
- function:函数,必须有返回值
- iterable:可迭代对象
- return:返回function对iterable迭代每一个元素所组合成一个的新map对象。
例子:将一个数组的每个元素的平方映射到另一个产生所需结果的数组。
arr=[1,2,3,4]
lis=list(map(lambda x:x**2,arr))
print(lis)
输出:
[1, 4, 9, 16]
Filter函数
Filter函数:
filter(function, iterable)
- function:判断函数,必须有bool返回值
- iterable:可迭代对象
- return:返回function对iterable迭代每一个且判断为True的元素所组合成一个的新filter对象。
例子:输出能被3整除的元素成的新列表。
arr=[1,2,3,4]
lis=list(filter(lambda x:x%3==0,arr))
print(lis)
输出:
[3, 9]
Reduce函数
Reduce函数:reduce不是Python内置函数,需要导入functools模块。
from functools import reduce
reduce(function, sequence[, initial])
- function:有2个参数的函数,必须有返回值
- iterable:可迭代对象
- initial:可选,初始参数
- return:返回function累积应用于sequence的项的结果。累积的项就作为左参数,下一个迭代的项作为右参数,2个参数再传入function。
例子:假设有一个整数列表,并求得所有元素的总和。
from functools import reduce
arr=[1,2,3,4,5]
result=reduce(lambda x,y:x+y,arr)
print(result)
输出:
15
例子:从列表中找到最大或最小的元素。
from functools import reduce
lst = [2,4,6,8]
# 找到最大元素
print(reduce(lambda x, y: x if x>y else y, lst))
# 找到最小元素
print(reduce(lambda x, y: x if x<y else y, lst))
输出:
8
2
例子:转置字符串
from functools import reduce
str1="hello"
print(reduce(lambda x,y:y+x,str1))
输出:
olleh
高阶函数的替代方法
列表推导式
arr=[1,2,3,4]
new_arr=[i**2 for i in arr]
print(new_arr)
输出:
[1,4,9,16]
字典推导式
lst = [2,4,6,8]
dist = {item:item**2 for item in lst}
print(dist)
输出:
{2: 4, 4: 16, 6: 36, 8: 64}
本篇博文参考:Python中的万能之王lambda