python中的高阶函数
python中的高阶函数
文章目录:
- 1 什么是高阶函数?
- 1.1 高阶函数:一个函数的`函数名`作为参数传给另外一个函数
- 1.2 高阶函数:一个函数返回值(return)为另外一个`函数`
- 2 python内置的高阶函数
- 2.1 高阶函数:map
- 2.1.1 对于迭代器Iterator三种方式访问
- 2.2 高阶函数:filter
- 2.3 高阶函数:reduce
- 2.4 高阶函数:sorted
1 什么是高阶函数?
只要满足下面的任意一个条件就是高阶函数
- 1、一个函数的
函数名
作为参数传给另外一个函数 - 2、一个函数返回值(return)为另外一个
函数
(返回为自己,则为递归)
下面分别举例详细说明:
1.1 高阶函数:一个函数的函数名
作为参数传给另外一个函数
def func():print("定义一个普通函数")def high_level(func):print("定义一个高阶函数")# 在函数内部,通过传入的函数参数调用func()high_level(func)
# 结果
"""
定义一个高阶函数
定义一个普通函数
"""
把一个函数名作为参数传给另外一个函数之后,就可以在高阶函数内部调用这个函数了
1.2 高阶函数:一个函数返回值(return)为另外一个函数
def func():print("定义一个普通函数")def high_level(func):print("定义一个高阶函数")return func# return func() 这个是直接返回函数调用,递归函数就是如此res = high_level(func)
# 高阶函数返回函数之后在调用func函数
res()
# 结果
"""
定义一个高阶函数
定义一个普通函数
"""
要高阶函数的返回值为函数,则必须要把函数作为参数传入
2 python内置的高阶函数
1、map
2、filter
3、reduce
:是functools模块中的函数,需要导入- 4、sorted
2.1 高阶函数:map
map
函数接收的是两个参数,一个是函数名,另外一个是序列,其功能是将序列中的数值作为函数的参数依次传入到函数值中执行,然后再返回到列表中。返回值是一个迭代器对象
eg:<map object at 0x00000214EEF40BA8>
图片示例:
举例说明:
def func(x):return x**2map(func, [2,3,4,5])
print(map(func, [2,3,4,5]))
print(type(map(func, [2,3,4,5])))res = map(func, [2,3,4,5])for i in res:print(i)list(map(func, [2,3,4,5]))# 结果
"""
<map object at 0x0000022C5F15CB00>
<class 'map'>
4
9
16
25
[4, 9, 16, 25]
"""
可以看出,只要用map函数,就可以让列表中的每一个数都完成一次对函数参数的调用,并将结果返回到一个可迭代对象中
可以通过 list(map()) 将map函数返回的迭代对象转化为列表
高阶函数map
一般 和 匿名函数 lambda联合使用
calc1 = lambda x:x**2
print(calc1(2))calc2 = lambda x, y : x*y
print(calc2(3, 5))print(list(map(calc1, [6,7,8,9])))
# 或 # 两者是一样的
print(list(map(lambda x, : x**2, [6,7,8,9])))print(list(map(calc2, [2,3,4,5], [6,7,8,9])))
# 或 # 两者是一样的
print(list(map(lambda x, y : x*y, [2,3,4,5], [6,7,8,9])))# 结果
"""
4
15
[36, 49, 64, 81]
[36, 49, 64, 81]
[12, 21, 32, 45]
[12, 21, 32, 45]
"""
2.1.1 对于迭代器Iterator三种方式访问
- next()
- for循环
- 变成列表
res = map(lambda x:x**3, [2,3,4])
next(res)res = map(lambda x:x**3, [2,3,4])
for i in res:print(i)res = map(lambda x:x**3, [2,3,4])
print(list(res))
2.2 高阶函数:filter
filter函数也是接收一个函数和一个序列的高阶函数,其主要功能是过滤
。其返回值也是迭代器对象,例如:<filter object at 0x000002042D25EA90>,其图示如下:
图片示例:
names=["Alex","amanda","xiaowu"]
#filter函数机制
def filter_test(func,iter):names_1=[]for i in iter:if func(i): #传入的func函数其结果必须为bool值,才有意义names_1.append(i)return names_1
#filter_test函数
print(filter_test(lambda x:x.islower(),names))#filter函数
print(list(filter(lambda x:x.islower(),names)))
传入的参数返回的是布尔值, 例如: "Tom".islower(),返回的是一个布尔值False,只有所有的字母小写返回True
2.3 高阶函数:reduce
reduce函数也是一个参数为函数,另一个参数为可迭代对象 Iterable Object(eg: list列表)。,其返回值为一个值而不是迭代器对象
,故其常用与叠加、叠乘
等,图示例如下:
reduce中的函数必须也要接收2个参数,执行时把前一个结果继续和序列的下一个元素做累积计算,其效果就是:
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
from functools import reduce
def func(x, y):return x*10 + yreduce(func, [3,4,5,6])
# func(3,4) = 3*10+4 = 34
# func( func(3,4),5) = func(34, 5) = 34*10+5 = 345
# func( func( func(3,4), 5), 6) = 345*10 +6 = 3456# 结果
# 3456
Map/Reduce常常一起配合使用,下面的例子是一个用Map/Reduce把str转换为int的函数:
from functools import reduceDIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}def str2int(s):def fn(x, y):return x * 10 + ydef char2num(s):return DIGITS[s]return reduce(fn, map(char2num, s))# 结果
# 123456789
2.4 高阶函数:sorted
Python内置的sorted()函数就可以对list进行排序:
>>> sorted([36, 5, -12, 9, -21])
[-21, -12, 5, 9, 36]
此外,sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序,例如按绝对值大小排序:
>>> sorted([36, 5, -12, 9, -21], key=abs)
[5, 9, -12, -21, 36]
key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序。
我们再看一个字符串排序的例子:
>>> sorted(['bob', 'about', 'Zoo', 'Credit'])
['Credit', 'Zoo', 'about', 'bob']
默认情况下,对字符串排序,是按照ASCII的大小比较的,由于’Z’ < ‘a’,结果,大写字母Z会排在小写字母a的前面。
现在,我们提出排序应该忽略大小写,按照字母序排序。要实现这个算法,不必对现有代码大加改动,只要我们能用一个key函数把字符串映射为忽略大小写排序即可。忽略大小写来比较两个字符串,实际上就是先把字符串都变成大写(或者都变成小写),再比较。
>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)
['about', 'bob', 'Credit', 'Zoo']
要进行反向排序,不必改动key函数,可以传入第三个参数reverse=True:
>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True)
['Zoo', 'Credit', 'bob', 'about']
参考:
1、https://www.cnblogs.com/littlefivebolg/articles/9094942.html
2、https://www.cnblogs.com/ArsenalfanInECNU/p/9620931.html # 博客值得学习
♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠
python中的高阶函数相关推荐
- python什么是高阶函数_说说 Python 中的高阶函数
高阶函数(higher-order function)指的是:接受一个函数为参数,或者把函数作为结果值返回的函数1. 1 sorted() 比较常见的高阶函数是 sorted(),其内部的关键字参数 ...
- Python中的高阶函数reduce
1.reduce(fn,iter) 功能: 用fn对iter里面的第一个和第二个元素进行运算,将得到的结果和第三个元素用 fn函数运算,最后得到一个结果. 直到序列中的元素全部参与运算 2.工作原理 ...
- Python中的高阶函数map
map[映射] 1.map(fn,iter) fn: 函数 iter : 序列[可迭代对象] 2.功能: 会将iter中的每个元素用作于fn的运算中, ...
- Python中的高阶函数filter
1.filter(fn,iter) 功能:将fn依次作用于iter中的每个元素,根据返回的结果确定是否需要保留元素, 如果返回的是True则表示保留,如果返回的是 ...
- Python中的高阶函数sorted
1.列表名.sort()和sorted()都是对列表进行排序 2.相同点: (1)默认升序,如果要降序,则设置reverse = True (2) 都可以自定义排序规则,只需要设置key关键字 ...
- python核心,内建函数,高阶函数
晨测 global和nonlocal区别 写一个递归的阶乘 回顾 1.global和nonlocal 关键字 2.函数的递归 1.查找规律 2.设置退出条件 3.性能 3.闭包 外函数中定义一个内函数 ...
- Python中的高阶变量
Python中的高阶变量 文章目录 Python中的高阶变量 变量进阶 01. 变量的引用 1.1 引用的概念 1.3 函数的参数和返回值的传递 02. 可变和不可变类型 哈希 `(hash)` 03 ...
- 【Kotlin】Kotlin 语言集合中的高阶函数详解 ( 数据类 data class | maxBy | minBy | filter | map | any | count | find )
文章目录 I . List 集合高阶函数引入 II . Kotlin 数据类 ( data class ) III . Java 代码 与 Kotlin 代码实现对比 ( 查询年龄最大的 ) IV . ...
- Kotlin中的高阶函数
博客地址sguotao.top/Kotlin-2018- 在Kotlin中,高阶函数是指将一个函数作为另一个函数的参数或者返回值.如果用f(x).g(x)用来表示两个函数,那么高阶函数可以表示为f(g ...
最新文章
- Spring context:component-scan代替context:annotation-config
- oracle 物化视图 ORA-23413: 表 xxx.xx 不带实体化视图日志
- 项目管理中网络图的看法和相关参数阅读说明
- bean validation校验方法参数_Spring Validation最佳实践及其实现原理,参数校验没那么简单!
- IOS autosizing(设置控件的固定位置大小)
- CSDN用户服务条款
- [高通SDM450][Android9.0]PL2303G驱动升级
- win10系统WiFi突然消失打不开,终极解决方法
- noob_Noob的Three.js指南
- html中如何淡化背景图片,Word2010如何去除图片背景
- 从GTK、GLib到GObject与GType历史梳理
- 计算机提示没有有效的ip配置,教大家电脑提示以太网没有有效的ip配置怎么办...
- C22_OC12-protocol协议
- 为什么要学数学、语文?还有英语!
- 一种万能解锁的解决方法
- 同盾设备指纹简单分析及手机相关ID了解
- 「竞品分析报告」不会写?不知从哪收集数据?请收下这篇竞品指南
- 大数据技术与应用实验报告2
- 十进制数转换成十六进制数~C语言
- 一次nginx代理前端报rewrite or internal redirection cycle while internally redirecting to “/index.html“ 记录
热门文章
- Linux 调度器发展简述
- lightoj 1063 求割点
- python 迭代器
- HDU 2079 选课时间(题目已修改,注意读题) 母函数 || 多重背包
- 、PHP只能访问mysql_php中 mysql函数不能调用,只有mysql_query()可以用
- 精通python爬虫框架-精通Python爬虫从Scrapy到移动应用(文末福利)
- python推荐入门书籍-这些都是Python官方推荐的最好的书籍(推荐)
- python的优缺点-Python 有什么一般人不知道的缺点?
- python动态图-Python图像处理之gif动态图的解析与合成操作详解
- python装饰器原理-深刻理解python装饰器