助力函数式编程
虽然Python中“万般皆下品,唯有对象高”,但函数式编程也不是不能用,而且Python提供了一些有助于进行函数式编程的函数:map、filter和reduce。
下面简单来看下它们的作用:
1、map()
语法:
map(f,seq)
参数解析:
f — 函数
seq — 序列
作用:将序列中所有的元素传递给函数。
这样得到的结果是一个Iterator,Iterator是惰性序列,因此通过list()
函数让它把整个序列都计算出来并返回一个list:
1 2 | >>> list ( map ( str , [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ])) [ '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' ] |
2、filter()
用于过滤序列,语法同map()相同,用于过滤序列,和map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。
例如:在一个数字序列中[1,2,3,4,5,6,7,8,9,10],取出所有偶数,就可以这样写:
1 2 3 4 | def is_odd(n): return n % 2 = = 0 list ( filter (is_odd,[ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ])) |
注意filter()的结果也是一个Iterator,故通过list()函数让它把整个序列都计算出来并返回一个list。
3、reduce()
函数reduce()是模块functools中的,所以需要导入才能用。
语法同map()一样,但是reduce()的第一个参数fn函数必须接收两个参数,因为reduce()的作用是使用指定的函数fn将序列的前两个元素合二为一,再将结果与第三个元素合二为一,以此类推,直到处理完整个序列并得到一个结果。
效果就是:
reduce(fn, [x1, x2, x3, x4]) = fn(fn(fn(x1, x2), x3), x4)
例如:可以用reduce实现一个求和:
1 2 3 4 5 6 | from functools import reduce def add(x,y): return x + y reduce (add, [ 2 , 4 , 6 , 8 , 10 ]) |
当然就本例而言,完全不如使用内置的sum。
终日不为以思,无益,不如学也
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥