Python内置的20个高阶函数的功能和示例详解

更多资料获取

📚 个人网站:ipengtao.com


Python是一门功能丰富的编程语言,提供了许多内置函数来处理各种数据操作。其中,高阶函数是一类特殊的函数,它们接受其他函数作为参数,或者返回函数作为结果。高阶函数是函数式编程的核心概念之一,可以大大提高代码的可读性和灵活性。本文将介绍Python内置的20个高阶函数,包括它们的功能和示例代码,帮助大家更好地理解和应用这些强大的函数。

1. map(function, iterable, ...)

map()函数接受一个函数和一个可迭代对象作为参数,将函数应用于可迭代对象的每个元素,并返回一个包含结果的迭代器。

# 将列表中的每个元素加1
numbers = [1, 2, 3, 4, 5]
result = map(lambda x: x + 1, numbers)
print(list(result))  # 输出 [2, 3, 4, 5, 6]

2. filter(function, iterable)

filter()函数接受一个函数和一个可迭代对象作为参数,将函数应用于可迭代对象的每个元素,并返回一个包含满足条件的元素的迭代器。

# 过滤出列表中的偶数
numbers = [1, 2, 3, 4, 5]
result = filter(lambda x: x % 2 == 0, numbers)
print(list(result))  # 输出 [2, 4]

3. reduce(function, iterable[, initializer])

reduce()函数接受一个函数和一个可迭代对象作为参数,递归地将函数应用于可迭代对象的元素,返回一个单一的结果值。

from functools import reduce# 计算列表中所有元素的乘积
numbers = [1, 2, 3, 4, 5]
result = reduce(lambda x, y: x * y, numbers)
print(result)  # 输出 120

4. sorted(iterable, key=None, reverse=False)

sorted()函数接受一个可迭代对象作为参数,返回一个新的排好序的列表。可选参数key用于指定排序关键字函数,reverse用于指定是否降序排序。

# 对列表进行排序
fruits = ["apple", "banana", "cherry", "date"]
result = sorted(fruits)
print(result)  # 输出 ['apple', 'banana', 'cherry', 'date']# 根据字符串长度进行排序
result = sorted(fruits, key=lambda x: len(x))
print(result)  # 输出 ['date', 'apple', 'banana', 'cherry']# 降序排序
result = sorted(fruits, reverse=True)
print(result)  # 输出 ['date', 'cherry', 'banana', 'apple']

5. zip(*iterables)

zip()函数接受多个可迭代对象作为参数,返回一个包含元组的迭代器,每个元组包含来自各个可迭代对象的元素。

# 合并两个列表
names = ["Alice", "Bob", "Charlie"]
scores = [85, 92, 78]
result = zip(names, scores)
print(list(result))  # 输出 [('Alice', 85), ('Bob', 92), ('Charlie', 78)]

6. enumerate(iterable, start=0)

enumerate()函数接受一个可迭代对象作为参数,返回一个包含元组的迭代器,每个元组包含元素的索引和值。

# 枚举列表中的元素
fruits = ["apple", "banana", "cherry"]
result = enumerate(fruits)
print(list(result))  # 输出 [(0, 'apple'), (1, 'banana'), (2, 'cherry')]

7. all(iterable)

all()函数接受一个可迭代对象作为参数,如果可迭代对象的所有元素都为真,则返回True,否则返回False

# 检查列表中的元素是否都大于0
numbers = [1, 2, 3, 4, 5]
result = all(x > 0 for x in numbers)
print(result)  # 输出 True# 检查列表中的元素是否都为真
values = [True, True, False, True]
result = all(values)
print(result)  # 输出 False

8. any(iterable)

any()函数接受一个可迭代对象作为参数,如果可迭代对象的任何元素为真,则返回True,否则返回False

# 检查列表中是否有元素大于10
numbers = [1, 2, 3, 4, 5]
result = any(x > 10 for x in numbers)
print(result)  # 输出 False# 检查列表中是否有元素为真
values = [True, False, False, False]
result = any(values)
print(result)  # 输出 True

9. max(iterable, *args, key=None, default=None)

max()函数接受一个可迭代对象作为参数,返回可迭代对象中的最大元素。可选参数key用于指定比较的关键字函数,default用于指定可迭代对象为空时的默认返回值。

# 获取列表中的最大值
numbers = [1, 3, 2, 4, 5]
result = max(numbers)
print(result)  # 输出 5# 根据字符串长度获取最长的字符串
fruits = ["apple", "banana", "cherry", "date"]
result = max(fruits, key=lambda x: len(x))
print(result)  # 输出 'banana'# 设置默认返回值
result = max([], default="No elements")
print(result)  # 输出 'No elements'

10. min(iterable, *args, key=None, default=None)

min()函数接受一个可迭代对象作为参数,返回可迭代对象中的最小元素。可选参数key用于指定比较的关键字函数,default用于指定可迭代对象为空时的默认返回值。

# 获取列表中的最小值
numbers = [1, 3, 2, 4, 5]
result = min(numbers)
print(result)  # 输出 1# 根据字符串长度获取最短的字符串
fruits = ["apple", "banana", "cherry", "date"]
result = min(fruits, key=lambda x: len(x))
print(result)  # 输出 'date'# 设置默认返回值
result = min([], default="No elements")
print(result)  # 输出 'No elements'

11. sum(iterable, start=0)

sum()函数接受一个可迭代对象作为参数,返回可迭代对象中所有元素的总和。可选参数start用于指定总和的初始值。

# 计算列表中所有元素的总和
numbers = [1, 2, 3, 4, 5]
result = sum(numbers)
print(result)  # 输出 15# 指定初始值并计算总和
result = sum(numbers, start=10)
print(result)  # 输出 25

12. any(iterable)

any()函数接受一个可迭代对象作为参数,如果可迭代对象的任何元素为真,则返回True,否则返回False

# 检查列表中是否有元素大于10
numbers = [1, 2, 3, 4, 5]
result = any(x > 10 for x in numbers)
print(result)  # 输出 False# 检查列表中是否有元素为真
values = [True, False, False, False]
result = any(values)
print(result)  # 输出 True

13. iter(obj, sentinel)

iter()函数返回一个迭代器对象,该迭代器会不断调用可迭代对象的__next__()方法,直到达到指定的sentinel值为止。

# 使用 iter() 创建一个迭代器
iterator = iter(lambda: input("Enter 'stop' to quit: "), 'stop')
for item in iterator:print(item)

14. next(iterator, default)

next()函数接受一个迭代器对象和一个默认值作为参数,返回迭代器的下一个元素。如果迭代器耗尽,将返回默认值。

# 获取迭代器的下一个元素
numbers = [1, 2, 3]
iterator = iter(numbers)
result = next(iterator)
print(result)  # 输出 1# 迭代器耗尽时返回默认值
result = next(iterator, None)
print(result)  # 输出 None

15. len(s)

len()函数返回对象的长度,例如列表、字符串、元组等。

# 获取列表的长度
fruits = ["apple", "banana", "cherry"]
result = len(fruits)
print(result)  # 输出 3# 获取字符串的长度
text = "Hello, World!"
result = len(text)
print(result)  # 输出 13

16. reversed(seq)

reversed()函数接受一个序列作为参数,返回一个逆序的迭代器。

# 反转列表
fruits = ["apple", "banana", "cherry"]
result = list(reversed(fruits))
print(result)  # 输出 ['cherry', 'banana', 'apple']

17. slice(start, stop, step)

slice()函数返回一个切片对象,该对象可以用于切片操作。start表示起始位置,stop表示结束位置,step表示步长。

# 创建一个切片对象
my_slice = slice(1, 5, 2)# 使用切片对象进行切片操作
numbers = [0, 1, 2, 3, 4, 5, 6]
result = numbers[my_slice]
print(result)  # 输出 [1, 3]

18. sorted(iterable, key=None, reverse=False)

sorted()函数接受一个可迭代对象作为参数,返回一个新的排好序的列表。可选参数key用于指定排序关键字函数,reverse用于指定是否降序排序。

# 对列表进行排序
fruits = ["apple", "banana", "cherry", "date"]
result = sorted(fruits)
print(result)  # 输出 ['apple', 'banana', 'cherry', 'date']# 根据字符串长度进行排序
result = sorted(fruits, key=lambda x: len(x))
print(result)  # 输出 ['date', 'apple', 'banana', 'cherry']# 降序排序
result = sorted(fruits, reverse=True)
print(result)  # 输出 ['date', 'cherry', 'banana', 'apple']

19. eval(expression, globals=None, locals=None)

eval()函数用于执行一个字符串表达式,并返回表达式的结果。可选参数globalslocals用于指定全局和局部命名空间,如果未提供,则使用当前命名空间。

# 执行字符串表达式
result = eval("3 + 5")
print(result)  # 输出 8# 在自定义命名空间中执行表达式
x = 10
result = eval("x + 5", globals(), locals())
print(result)  # 输出 15

需要谨慎使用eval()函数,因为它可以执行任意的Python代码,可能存在安全风险。

20. exec(object, globals=None, locals=None)

exec()函数用于执行一个字符串或代码块,并返回None。它可以用于执行包含Python代码的字符串或文件内容。可选参数globalslocals用于指定全局和局部命名空间。

# 执行包含Python代码的字符串
code = """
x = 10
y = 20
result = x + y
print(result)
"""
exec(code)  # 输出 30# 在自定义命名空间中执行代码块
x = 5
exec("x = x * 2", globals(), locals())
print(x)  # 输出 10

eval()函数类似,需要谨慎使用exec()函数,以避免安全风险。

总结

Python内置了许多强大的高阶函数,它们提供了丰富的功能来处理各种数据操作。本文介绍了20个常用的高阶函数,包括mapfilterreducesortedzipenumerateallanymaxminsumlenreversedslicesortedevalexec等。通过掌握这些高阶函数,可以更高效地处理数据、编写更简洁的代码,并更好地理解函数式编程的概念。

在实际编程中,根据任务需求选择合适的高阶函数可以大大提高代码的可读性和可维护性。希望本文对大家理解和应用Python中的高阶函数有所帮助,能够更加灵活地处理数据和编写高效的程序。


Python学习路线

在这里插入图片描述

更多资料获取

📚 个人网站:ipengtao.com

如果还想要领取更多更丰富的资料,可以点击文章下方名片,回复【优质资料】,即可获取 全方位学习资料包。

在这里插入图片描述
点击文章下方链接卡片,回复【优质资料】,可直接领取资料大礼包。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/243149.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何禁用WordPress站点的管理员电子邮件验证或修改检查频率?

今天boke112百科登录某个WordPress站点时,又出现“管理员邮件确认”的提示,要求确认此站点的管理员电子邮箱地址是否仍然正确。具体如下图所示: 如果点击“稍后提醒我”,那么管理员邮件验证页面就会在3天后重新显示。 说实话&…

Unity - 简单音频

“Test_04” AudioTest public class AudioTest : MonoBehaviour {// 声明音频// AudioClippublic AudioClip music;public AudioClip se;// 声明播放器组件private AudioSource player;void Start(){// 获取播放器组件player GetComponent<AudioSource>();// 赋值…

搭建开源数据库中间件MyCat2-配置mysql数据库双主双从

mycat2官网&#xff1a;MyCat2 前言&#xff1a;mycat2下载地址无法访问&#xff0c;不知道是不是被DNS污染了&#xff0c;还是需要搭梯子访问&#xff0c;所以我只能找到1.21的版本进行安装。搭建mycat2的前提是搭建数据库主从复制。 架构&#xff1a;双主双从 配置&#xf…

Verilog基础:强度建模与net型信号的多驱动问题(三)

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 四、一般情况下的net型信号的线与组合&#xff08;线网多驱动&#xff09; 在Verilog基础&#xff1a;强度建模与net型信号的多驱动问题&#xff08;二&#xff0…

成功解决java.nio.charset.MalformedInputException: Input length = 1

项目启动时报错如下 Connected to the target VM, address: 127.0.0.1:5309, transport: socket 18:01:22.607 [main] ERROR o.s.b.SpringApplication - [reportFailure,843] - Application run failed org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedIn…

开年大瓜!Mobileye股价暴跌

编者按&#xff1a;作为汽车智能化的第一波受益者&#xff0c;Mobileye的市场红利已经接近尾声。尤其是汽车芯片市场的白热化竞争&#xff0c;新一轮格局重构正在开启。 汽车智能化的供给关系&#xff0c;正在发生微妙变化。 本周&#xff0c;作为全球主要的辅助驾驶芯片及感知…

Joern环境的安装(Windows版)

Joern环境的安装(Windows版) 网上很少有关于Windows下安装Joern的教程&#xff0c;而我最初使用也是装在Ubuntu虚拟机中&#xff0c;这样使用很占内存&#xff0c;影响体验感。在Windows下使用源码安装Joern也是非常简单的过程&#xff1a; 提前需要的本地环境&#xff1a; …

【大数据】流处理基础概念(一):Dataflow 编程基础、并行流处理

流处理基础概念&#xff08;一&#xff09;&#xff1a;Dataflow 编程基础、并行流处理 1.Dataflow 编程基础1.1 Dataflow 图1.2 数据并行和任务并行1.3 数据交换策略 2.并行流处理2.1 延迟与吞吐2.1.1 延迟2.1.2 吞吐2.1.3 延迟与吞吐 2.2 数据流上的操作2.2.1 数据接入和数据…

GPS位置虚拟软件 AnyGo mac激活版

AnyGo for Mac是一款一键将iPhone的GPS位置更改为任何位置的强大软件&#xff01;使用AnyGo在其iOS或Android设备上改变其GPS位置&#xff0c;并在任何想要的地方显示自己的位置。这对那些需要测试应用程序、游戏或其他依赖于地理位置信息的应用程序的开发人员来说非常有用&…

【网络奇遇记】揭秘计算机网络性能指标:全面指南

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;网络奇遇记、数据结构 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. 速率1.1 数据量1.2 速率 二. 带宽三. 吞吐量四. 时延4.1 发送时延4.2 传播时延…

苹果电脑(Mac)的node版本安装以及升降级

在开发过程中&#xff0c;对于不同的开发环境或者较老的项目可能需要切换不同的node版本&#xff0c;此过程会涉及到node版本的升级与降级&#xff0c;安装node版本管理模块n&#xff08;sudo命令&#xff09;。 全局安装n模块 sudo npm install n -g//输入后回车&#xff0c…

MarkDown学习笔记 直观全面详细

前言 为什么我们要学习Markdown呢&#xff1f;因为Markdown简单易学易上手&#xff0c;可以以纯文本格式编写文档&#xff0c;然后转换成有效的HTML文档&#xff0c;并且以导出 HTML 、Word、图像、PDF、Epub 等多种格式的文档&#xff0c;许多网站平台的文章、博客、论文均可…

8.3 Springboot整合Redis 之Jedis方式

文章目录 前言一、Maven依赖二、新增子Module:tg-book-redis三、Jedis配置类3.1 Jedis连接池核心配置说明四、Jedis 工具类五、新增controller测试前言 Jedis是Redis官方推荐的Java客户端连接工具,用法非常简单,Jedis的API与Redis的API可以说是一模一样,所以非常有利于熟悉…

ora-12154无法解析指定的连接标识符

用户反映查询的时候报错ora-12154 这个系统只做历史数据查询使用&#xff0c;使用并不平凡&#xff0c;该数据库曾做过一次服务器间的迁移。 用户描述&#xff0c;所有oracle客户端查询该视图都报tns错误&#xff0c;一般ora-12154会发生在连接数据库时&#xff0c;因为tns配…

flink1.13环境搭建

1、本地启动非集群模式 最简单的启动方式&#xff0c;其实是不搭建集群&#xff0c;直接本地启动。本地部署非常简单&#xff0c;直接解压安装包就可以使用&#xff0c;不用进行任何配置&#xff1b;一般用来做一些简单的测试。 具体安装步骤如下&#xff1a; 1.1 下载安装包…

JVM系列-1.初识JVM

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring原理、JUC原理、Kafka原理、分布式技术原理、数据库技术、JVM原理&#x1f525;如果感觉博主的文…

C#实现基于Word保护性模板文件的修改

目录 制作一个保护性模板文件 给文件设置保护密码 设计模板内容 限制编辑 进一步的需求 范例运行环境 Office DCOM 配置 设计实现 进一步修改模板文件 设置和取消保护 遍历WORD内容控件 总结 制作一个保护性模板文件 在类似一些OA的自动化处理或审批类系统里&a…

VC++中使用OpenCV进行形状和轮廓检测

VC中使用OpenCV进行形状和轮廓检测 在VC中使用OpenCV进行形状和轮廓检测&#xff0c;轮廓是形状分析以及物体检测和识别的有用工具。如下面的图像中Shapes.png中有三角形、矩形、正方形、圆形等&#xff0c;我们如何去区分不同的形状&#xff0c;并且根据轮廓进行检测呢&#…

【Git】常用的Git操作集合

常用的Git操作集合 1. 分支操作1.1 查看本地所有分支git branch 1.2 查看所有分支&#xff08;包含本地远程仓库&#xff09;git branch -a 1.3 切换分支git checkout test 2. 常用基本操作2.1 查看 git 各存储区内(文件)状态git status 2.2 查看工作区与暂存区文件差异git dif…

【记录】解决 git 仓库突然出现连接失败

问题描述 今天在 push 代码代码的时候突然发现无法 push(但是我可以正常打开 Gihub)&#xff0c;这可不行&#xff0c;我可是 git 的重度使用者&#x1f60d;&#xff0c;我所有的代码都托管在了 Github 上&#xff0c;没有它我的日子怎么活啊&#xff01;&#xff01;&#x…