10. lambda表达式

176 阅读2分钟

声明:在本篇文章中的语法都为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)
输出:
{24416636864}

本篇博文参考:Python中的万能之王lambda