1.匿名函数lambda
匿名函数顾名思义不需要命名的函数。
lambda函数的形式:
'''
lambda 参数1,参数2,:表达式
其中参数可以有多个,函数结果返回表达式的计算结果,
表达式中不能含有return,表达式本身就是返回结果
'''
f = lambda x:x**2
print(f(2)) # 4
f2 = lambda x,y,z:x+y+z
print(f2(1,2,3)) # 6
示例:
st = [lambda x:x*i for i in range(3)]
print(lst) # lst是一个含有三个匿名函数的列表,此时每一个lambda函数都没有进行调用。
for i in lst:
print(i(1)) # 当开始循环调用时全局变量i=2,所以每次调用打印结果一样
"""
输出结果:
2
2
2
"""
匿名函数可以用于以下的高阶函数,从而使代码更加简洁
2.高阶函数
高阶函数即可以接收函数作为参数的函数。
2.1map
map(函数,可迭代对象)
map函数有两个参数第一个是函数,第二个是可迭代对象,其功能是将可迭代对象中的每一个元素都做第一个参数–函数的操作,然后将结果返回一个迭代器。
# 计算列表中每个元素的平方根
lst = [0, 4, 9, 25]
result = list(map(sqrt, lst))
print(result) # [0.0, 2.0, 3.0, 5.0]
# 计算列表中每个元素*2
result = list(map(lambda x:x*2, lst))
print(result) # [0, 8, 18, 50]
2.2filter
filter(函数, 可迭代对象)
filter函数为过滤函数,将可迭代对象中的元素一一放入第一个参数函数中进行计算,结果布尔值为True则保留该元素,结果为False则过滤该元素
lst = [0, 4, 9, 25]
lst = filter(lambda x: x%2==0, lst)
print(lst) # <filter object at 0x000001BEDE348A58>
print(list(lst)) # [0, 4]
2.3reduce
reduce(函数,可迭代对象)
reduce函数首先将可迭代对象中前两个元素入参在函数中进行计算,再将其结果和可迭代对象第三个元素入参进行计算
from functools import reduce
result = reduce(lambda x,y:x+y, [1,2,3,4])
print(result) # 10