Python高阶函数mapfilterreduce使用_函数式编程实战【技巧】

admin 百科 13
Python的map、filter、reduce是函数式编程三大核心:map用于批量转换(惰性求值,注意返回值非None);filter按真值筛选(非仅非空);reduce需导入且设初值,适用于累积计算。

Python高阶函数mapfilterreduce使用_函数式编程实战【技巧】-第1张图片-佛山资讯网

Python 的 mapfilterreduce 是函数式编程的三大核心高阶函数,它们能帮你写出更简洁、可读性更强、副作用更少的代码。关键不在于“炫技”,而在于选对场景、写对逻辑、避开常见坑。

map:批量转换,别改原数据,也别让它返回 None

map(func, iterable) 对可迭代对象每个元素调用函数,返回一个 map 对象(惰性求值)。常用于统一格式化、类型转换或简单计算。

  • 推荐用列表推导式替代 map 的情况:逻辑简单、只涉及一两个表达式(如 [x * 2 for x in nums]list(map(lambda x: x*2, nums)) 更直观)
  • 适合 map 的场景:函数已定义好、逻辑稍复杂、或需复用(比如 map(str.strip, lines)map(json.loads, json_strings)
  • 注意:如果函数返回 Nonemap 结果里也会是 None——这容易引发后续 AttributeError,建议函数明确返回值

filter:筛选要“真值”,不是“非空”

filter(func, iterable) 保留使函数返回真值(truthy)的元素。很多人误以为它过滤 None 或空字符串,其实它判断的是布尔上下文结果。

  • filter(None, [0, 1, '', 'hello', [], [1]]) 返回 [1, 'hello', [1]] —— 因为 0''[] 在 bool 中为 False
  • 写自定义函数时,直接返回条件表达式即可,避免绕弯:filter(lambda x: x > 10, nums)filter(lambda x: True if x > 10 else False, nums) 干净得多
  • 若需按属性筛选对象,优先用 getattr(obj, 'field') 或点号访问(确保对象有该属性),否则加 hasattr 防错

reduce:累积计算,别硬刚,记得导入和设初值

reduce 不在内置命名空间里,必须从 functools 导入:from functools import reduce。它把函数依次作用于序列元素,累计出单个结果。

标签: word python js json 数据清洗 可迭代对象 red

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~