Python基础知识(十):高阶函数【map()、reduce()、filter()、lambda、sorted】【高阶函数:可接收其他函数作为参数的函数】

本文主要是介绍Python基础知识(十):高阶函数【map()、reduce()、filter()、lambda、sorted】【高阶函数:可接收其他函数作为参数的函数】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

高阶函数:一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归),满足其一则为高阶函数。

一、map函数

map函数接收的是两个参数,一个函数,一个序列,其功能是将序列中的值处理再依次返回至列表内。其返回值为一个迭代器对象–》例如:<map object at 0x00000214EEF40BA8>。其用法如图:
在这里插入图片描述
接下来我们看一下map函数的机制是怎么样的:

num=[1,2,3,4,5]
def square(x):return x**2
#map函数模拟
def map_test(func,iter):num_1=[]for i in iter:ret=func(i)# print(ret)num_1.append(ret)return num_1.__iter__() #将列表转为迭代器对象#map_test函数
print(list(map_test(square,num)))
#map函数
print(list(map(square,num)))#当然map函数的参数1也可以是匿名函数、参数2也可以是字符串
print(list(map_test(lambda x:x.upper(),"amanda")))
print(list(map(lambda x:x.upper(),"amanda")))

二、filter函数

filter函数也是接收一个函数和一个序列的高阶函数,其主要功能是过滤。其返回值也是迭代器对象,例如:<filter object at 0x000002042D25EA90>,其图示如下:
在这里插入图片描述
接下来我们看一下filter函数的用法以及其机制是怎么样的:

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)))

三、reduce函数

reduce函数也是一个参数为函数,一个为可迭代对象的高阶函数,其返回值为一个值而不是迭代器对象,故其常用与叠加、叠乘等,图示例如下:
在这里插入图片描述
实例如下:

#reduce函数不是内置函数,而是在模块functools中的函数,故需要导入
from functools import reducenums=[1,2,3,4,5,6]
#reduce函数的机制
def reduce_test(func,array,ini=None): #ini作为基数if ini == None:ret =array.pop(0)else:ret=inifor i in array:ret=func(ret,i)return ret
#reduce_test函数,叠乘
print(reduce_test(lambda x,y:x*y,nums,100))
#reduce函数,叠乘
print(reduce(lambda x,y:x*y,nums,100))

四、filter、map区别

batch = [None, 2, 3]
print("batch = ", batch)a = list(filter(lambda x: x is not None, batch))
b = list(filter(lambda x: x, batch))
c = lambda x: x, batchprint("\na = ", a)
print("b = ", b)
print("c = ", c)demo1 = [1, 2, 3, 4, 5, 6, 7]
demo1_filter = filter(lambda x: x > 2, demo1)
demo1_filter_list = list(demo1_filter)print("\ntype(demo_filter) = {0}; demo_filter = {1}".format(type(demo1_filter), demo1_filter))
print("type(demo1_filter_list) = {0}; demo1_filter_list = {1}".format(type(demo1_filter_list), demo1_filter_list))demo2 = [1, 2, 3, 4, 5, 6, 7]
demo2_map = map(lambda x: x > 2, demo2)
demo2_map_list = list(demo2_map)print("\ntype(demo2_map) = {0}; demo2_map = {1}".format(type(demo2_map), demo2_map))
print("type(demo2_map_list) = {0}; demo2_map_list = {1}".format(type(demo2_map_list), demo2_map_list))

打印结果:

batch =  [None, 2, 3]a =  [2, 3]
b =  [2, 3]
c =  (<function <lambda> at 0x7f1da46f9280>, [None, 2, 3])type(demo_filter) = <class 'filter'>; demo_filter = <filter object at 0x7f1da4519fa0>
type(demo1_filter_list) = <class 'list'>; demo1_filter_list = [3, 4, 5, 6, 7]type(demo2_map) = <class 'map'>; demo2_map = <map object at 0x7f1da4519e20>
type(demo2_map_list) = <class 'list'>; demo2_map_list = [False, False, True, True, True, True, True]



参考资料:
Python高阶函数
python-内置常用高阶函数
python中5个常用的内置高阶函数

这篇关于Python基础知识(十):高阶函数【map()、reduce()、filter()、lambda、sorted】【高阶函数:可接收其他函数作为参数的函数】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1128824

相关文章

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

Java中的Lambda表达式及其应用小结

《Java中的Lambda表达式及其应用小结》Java中的Lambda表达式是一项极具创新性的特性,它使得Java代码更加简洁和高效,尤其是在集合操作和并行处理方面,:本文主要介绍Java中的La... 目录前言1. 什么是Lambda表达式?2. Lambda表达式的基本语法例子1:最简单的Lambda表

一文带你搞懂Python中__init__.py到底是什么

《一文带你搞懂Python中__init__.py到底是什么》朋友们,今天我们来聊聊Python里一个低调却至关重要的文件——__init__.py,有些人可能听说过它是“包的标志”,也有人觉得它“没... 目录先搞懂 python 模块(module)Python 包(package)是啥?那么 __in

使用Python实现图像LBP特征提取的操作方法

《使用Python实现图像LBP特征提取的操作方法》LBP特征叫做局部二值模式,常用于纹理特征提取,并在纹理分类中具有较强的区分能力,本文给大家介绍了如何使用Python实现图像LBP特征提取的操作方... 目录一、LBP特征介绍二、LBP特征描述三、一些改进版本的LBP1.圆形LBP算子2.旋转不变的LB

Python中__init__方法使用的深度解析

《Python中__init__方法使用的深度解析》在Python的面向对象编程(OOP)体系中,__init__方法如同建造房屋时的奠基仪式——它定义了对象诞生时的初始状态,下面我们就来深入了解下_... 目录一、__init__的基因图谱二、初始化过程的魔法时刻继承链中的初始化顺序self参数的奥秘默认

Python实现特殊字符判断并去掉非字母和数字的特殊字符

《Python实现特殊字符判断并去掉非字母和数字的特殊字符》在Python中,可以通过多种方法来判断字符串中是否包含非字母、数字的特殊字符,并将这些特殊字符去掉,本文为大家整理了一些常用的,希望对大家... 目录1. 使用正则表达式判断字符串中是否包含特殊字符去掉字符串中的特殊字符2. 使用 str.isa

python中各种常见文件的读写操作与类型转换详细指南

《python中各种常见文件的读写操作与类型转换详细指南》这篇文章主要为大家详细介绍了python中各种常见文件(txt,xls,csv,sql,二进制文件)的读写操作与类型转换,感兴趣的小伙伴可以跟... 目录1.文件txt读写标准用法1.1写入文件1.2读取文件2. 二进制文件读取3. 大文件读取3.1

使用Python实现一个优雅的异步定时器

《使用Python实现一个优雅的异步定时器》在Python中实现定时器功能是一个常见需求,尤其是在需要周期性执行任务的场景下,本文给大家介绍了基于asyncio和threading模块,可扩展的异步定... 目录需求背景代码1. 单例事件循环的实现2. 事件循环的运行与关闭3. 定时器核心逻辑4. 启动与停

基于Python实现读取嵌套压缩包下文件的方法

《基于Python实现读取嵌套压缩包下文件的方法》工作中遇到的问题,需要用Python实现嵌套压缩包下文件读取,本文给大家介绍了详细的解决方法,并有相关的代码示例供大家参考,需要的朋友可以参考下... 目录思路完整代码代码优化思路打开外层zip压缩包并遍历文件:使用with zipfile.ZipFil

Python处理函数调用超时的四种方法

《Python处理函数调用超时的四种方法》在实际开发过程中,我们可能会遇到一些场景,需要对函数的执行时间进行限制,例如,当一个函数执行时间过长时,可能会导致程序卡顿、资源占用过高,因此,在某些情况下,... 目录前言func-timeout1. 安装 func-timeout2. 基本用法自定义进程subp