Python函数式编程(二):常见高级函数
一个函数的参数中有函数作为参数,这个函数就为高级函数。
下面学习几个常见高级函数。
---------------------------------------------------------------------------------------
一、map()
传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator
返回
举例:
有一个函数f(x)=x2,要把这个函数作用在一个list [1, 2, 3, 4, 5, 6, 7, 8, 9]
上
>>> def f(x): ... return x * x ... >>> r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> list(r) [1, 4, 9, 16, 25, 36, 49, 64, 81]
即list每一个元素都执行了函数f的操作
-------------------------------------------------------------------------------------
二、filter()
传入的函数依次作用于每个元素,然后根据返回值是True
还是False
决定保留还是丢弃该元素
和map()类似,不过这里就要求函数的返回值必须是布尔型
举例:
在一个list中,删掉偶数,只保留奇数 def is_odd(n): return n % 2 == 1 list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15])) # 结果: [1, 5, 9, 15]
把一个序列中的空字符串删掉,可以这么写: def not_empty(s): return s and s.strip() list(filter(not_empty, ['A', '', 'B', None, 'C', ' '])) # 结果: ['A', 'B', 'C']
-------------------------------------------------------------------------------------
三、reduce()
一个函数作用在一个序列[x1, x2, x3, ...]
上,这个函数必须接收两个参数,reduce
把结果继续和序列的下一个元素做累积计算
举例:
>>> from functools import reduce >>> def add(x, y): ... return x + y ... >>> reduce(add, [1, 3, 5, 7, 9]) 25
过程就是先计算1+3 返回4 ,再根据这个结果+5 ,依次计算,就相当于1+3+5+7+9=25
-------------------------------------------------------------------------------------
四、sorted()
排序函数,数字按有小到大排列,字符串由ASCII大小排列
1、基础用法:
>>> sorted([36, 5, -12, 9, -21]) [-21, -12, 5, 9, 36]
>>> sorted(['bob', 'about', 'Zoo', 'Credit']) ['Credit', 'Zoo', 'about', 'bob']
2、函数key参数用法:
即将元素先按key对应的函数一个个处理完之后在进行排序
下面,先将list的元素一个个绝对值处理,然后排序
sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序,例如按绝对值大小排序: >>> sorted([36, 5, -12, 9, -21], key=abs) [5, 9, -12, -21, 36]
下面,先将list的元素字母都小写,然后排序
>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower) ['about', 'bob', 'Credit', 'Zoo']
3、函数reverse参数用法,是否结果反转
>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True) ['Zoo', 'Credit', 'bob', 'about']
作者:听着music睡
出处:http://www.cnblogs.com/xqxacm/
Android交流群:38197636
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2015-10-17 浅谈DES加密算法
2015-10-17 浅谈URLEncoder编码算法