Python入门Day17:函数式编程(map/filter/reduce/lambda)
学习目标:
- 掌握匿名函数lambda的写法与用法
- 熟练使用内置函数map(),filter(),reduce()
- 理解函数式编程思想:函数作为“一等公民”
- 能使用这些工具处理列表,字符串,字典等结构
一、lambda表达式(匿名函数)
定义:lambda是一种简洁的函数定义方式,适用于存放临时,轻量函数
lambda 参数:表达式
示例1:求平方
square = lambda x:x ** 2
print(square(5)) # 输出:25
等价于
def square(x):return x ** 2
示例2:多参数求和
add = lambda a,b:a+b
print(add(3,4)) #输出:7
使用场景:
- 作为map,filter,sorted等函数的参数
- 不需要正式定义一个函数名的场合
二、map()函数——映射转换
对序列中的每个元素应用一个函数,返回一个新序列(生成器)
nums = [1,2,3,4]
squares = map(lambda x:x**@,nums)
print(list(squares)) #[1,4,9,16]
- map(func,iterable)会对iterable中的每个元素都调用func
示例:批量字符串转大写
names = ["alice","bob","charlie"]
result = map(lambda s:s.upper(),names)
print(list(result)) # ['Alice','BOB','CHARLIE']
三、filter()函数——过滤筛选
对序列中的元素按条件筛选,保留返回True的元素
nums = [1,2,3,4,5]
even = filter(lambda x:x % 2==0,nums)
print(list(even))
示例:筛选非空字符串
items = ["","apple","","banana"]
non_empty = filter(lambda x:x != "",items)
print(list(non_empty)) #['apple','banana']
四、reduce()函数——累计计算
对序列进行“前两个->中间值->下一个“的连续操作
需要先导入模块:
from functools import reduce
示例:求列表累积乘积
from functools import reducenums = [1,2,3,4]
result = reduce(lambda x,y:x*y,nums)
print(result) # 输出:24
运算过程:
1 * 2 = 2
2 * 3 = 6
6 * 4 = 24
map/filter/reduce对比总结
函数 | 功能 | 返回类型 | 是否惰性 |
map | 对每项做转换 | 生成器 | ✅ |
filter | 按条件筛选 | 生成器 | ✅ |
reduce | 两两累计计算 | 最终值(单个) | ❌ |