13_Python的高阶函数

高阶函数
高阶函数是Python编程中一个非常强大和有用的特性,它们允许程序员编写更简洁、更抽象的代码。
Python中的高阶函数是那些至少满足以下一个条件的函数:
- 接受一个或多个函数作为输入(也就是说,它的参数之一是函数)。
- 输出一个函数。
1. map()
map() 函数接收两个参数,一个是函数,一个是可迭代对象,将传入的函数依次作用到可迭代对象的每个元素,并把结果作为新的迭代对象返回。
# 用法:
map(func,iterable)
# 求平方
def square(x):return x ** 2numbers = [1, 2, 3, 4, 5]
# 将列表中的元素都求平方
squared_numbers = map(square, numbers)
print(list(squared_numbers)) # 输出: [1, 4, 9, 16, 25]
# 上面的例子用lambda表达式写
print(list(map(lambda n:n**2,numbers)))
map() 函数返回一个迭代器,而不是一个列表。如果需要将结果转换为列表,可以使用 list() 函数。
2. filter()
filter() 函数用于过滤序列,接收一个函数和一个序列作为输入,返回一个迭代器,该迭代器生成那些函数返回值为True的序列元素。返回值为False的丢弃。
# 用法:
filter(func,iterable)
# 是否偶数
def is_even(x):return x % 2 == 0numbers = [1, 2, 3, 4, 5, 6]
# 过滤出序列中的偶数
even_numbers = filter(is_even, numbers)
print(list(even_numbers)) # 输出: [2, 4, 6]
# 上面的例子用lambda表达式写
print(list(filter(lambda n:n % 2 == 0,numbers)))
3. reduce()
reduce() 函数来自于 functools 模块,它接收一个函数和一个序列作为输入,函数必须接受两个参数,reduce() 将会遍历序列中的元素,并累积结果。
# 用法:
reduce(func,iterable)
from functools import reducedef add(x, y):return x + ynumbers = [1, 2, 3, 4, 5]
sum_of_numbers = reduce(add, numbers)
print(sum_of_numbers) # 输出: 15
# 上面的例子用lambda表达式写
print(reduce(lambda x, y: x + y, numbers))
4. sorted()
sorted() 函数可以对列表进行排序,它接收一个函数作为参数,可以用来指定排序的依据。
# 用法:
sorted(iterable,key)
pairs = [(3, 'three'), (1, 'one'), (2, 'two'), (-5, 'five'), (4, 'four')]
# 以列表中元组的第二个元素进行排序
pairs_sorted_by_second = sorted(pairs, key=lambda pair: pair[1])
print(pairs_sorted_by_second) # 输出: [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]
# 以列表中元组的第二个元素降序进行排序
pairs_sorted_by_second_res = sorted(pairs, key=lambda pair: pair[1], reverse=True)
print(pairs_sorted_by_second_res) # 输出: [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]
# 以列表中元组的第1个元素的绝对值进行排序
pairs_sorted_by_first = sorted(pairs, key=lambda pair: abs(pair[0]))
print(pairs_sorted_by_first) # 输出: [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]
# 列表嵌套元组的排序
infor = [("Tom",100,95),("Lilei",90,95),("Jim",90,96),("Green",90,83),("John",100,95),("Lucy",100,95)
]def sord_num1(s):return s[1]def sord_num1_num2(s):return s[1],s[2]
# 以元组的第二个元素排序
print(sorted(infor,key=sord_num1))
# 以元组的第二个、第三个元素排序
print(sorted(infor,key=sord_num1_num2))
5. lambda 表达式
lambda 表达式可以创建匿名函数,常用于高阶函数中。
numbers = [1, 2, 3, 4, 5]
squared_numbers = map(lambda x: x**2, numbers)
print(list(squared_numbers)) # 输出: [1, 4, 9, 16, 25]
高阶函数在Python的很多地方都有应用,比如在函数式编程、装饰器、回调函数等高级概念中都非常常见。通过使用高阶函数,可以大大提高代码的灵活性和表达力。
附件
本文对应的jupyter notebook源码链接,欢迎下载练习:https://download.csdn.net/download/fx_yzjy101/89774843
如有问题请留言。
相关文章:
13_Python的高阶函数
高阶函数 高阶函数是Python编程中一个非常强大和有用的特性,它们允许程序员编写更简洁、更抽象的代码。 Python中的高阶函数是那些至少满足以下一个条件的函数: 接受一个或多个函数作为输入(也就是说,它的参数之一是函数&#…...
清空当前机器所有Docker容器和镜像
sudo docker stop $(sudo docker ps -aq) sudo docker rm $(sudo docker ps -aq) sudo docker rmi $(sudo docker images -q)删除当前机器上的所有Docker镜像是一个高风险操作,因为它会删除所有镜像,包括那些可能正在被容器使用的镜像。在执行此操作之前…...
FreeRTOS学习——Systick中断、SVC中断、PendSV中断
FreeRTOS学习——接口宏portmacro.h,仅用于记录自己阅读与学习源码 FreeRTOS Kernel V10.5.1 port :GCC/ARM_CM7 文章目录 Systick源码触发方式 SVC源码触发方式 PendSV源码触发方式 相关汇编指令 Systick 源码 在Systick中断xPortSysTickHandler中&am…...
汇量科技大数据面试题及参考答案
如何在 SQL 中处理三个字段完全一样的去重?在 Scala 中又该如何实现? 在 SQL 中,可以使用多种方法来处理三个字段完全一样的去重。一种常见的方法是使用 DISTINCT 关键字结合多个字段来实现。例如,假设有表 table_name,包含字段 field1、field2 和 field3,可以使用以下 S…...
移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——14.AVL树
1.AVL 树 1.1AVL 树的概念 二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查 找元素相当于在顺序表中搜索元素,效率低下。因此,两位俄罗斯的数学家G.M.Adelson-Velskii 和E.M.Landis在1962…...
Python 的数据类型与操作
一、常用内置类型(Built - in Types) Python 拥有多种内置数据类型,这些类型满足了各种编程需求,从简单的数据存储到复杂的数据结构表示。 1. 数值类型(Numeric Types) 整数(int)&a…...
Python燃烧废气排放推断算法模型
🎯要点 宏观能耗场景模型参数化输入数据,分析可视化输出结果,使用场景时间序列数据模型及定量和定性指标使用线图和箱线图、饼图、散点图、堆积条形图、桑基图等可视化模型输出结果根据气体排放过程得出其时间序列关系,使用推断模…...
Qt中多语言的操作(以QtCreator为例)
1、首先,我们在代码中与文本相关的且需要支持多语言的地方,用tr来包含多语言key(多语言key是我们自己定义的),如下 //举例 QPushButton* btnnew QPushButton(this); btn->move(20,20); btn->resize(100,50); //…...
计算机毕业设计 社区医疗服务系统的设计与实现 Java实战项目 附源码+文档+视频讲解
博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…...
html+css学习
html 元素 html元素是HTML的根元素,一个文档只能有一个,其他所有元素都是其后代元素 html有一个属性为lang,其作用是: 帮助语言合成工具确定要使用的发音帮助翻译工具确定要使用的翻译规则 当属性lang“en”则表示告诉其浏览器…...
2.gitlab ce 细粒度的权限控制
需求: 在提交merge reqeust时,必须指定审核人,并且要选审核人清单里的 有个code owners应该可以做到(gitlab ce应该也可以用) 下面是参考的文档 细粒度的代码权限怎么做?极狐GitLab 代码所有者来帮忙 -…...
G - Merchant Takahashi / F - Useless for LIS
G - Merchant Takahashi 首先考虑暴力 DP。 设最后一步走到编号 ii 的城镇的方案的最大收益为 fifi,则每次集市相当于是 fTi←fj−C∣Ti−j∣Pi(1≤j≤n)。 这样每次可以通过枚举 j 来转移,这样总时间复杂度是 O(nm) 的&…...
自然语言处理实例
引子:基于聊天机器人项目的自然语言处理(NLP)学习路线 自然语言处理(Natural Language Processing,简称 NLP)是人工智能的重要分支,旨在帮助计算机理解、生成和处理人类语言。NLP 技术广泛应用于搜索引擎、机器翻译、语音识别、文本摘要、情感分析、对话系统等领域。为…...
『功能项目』主角属性值显示【75】
本章项目成果展示 我们打开上一篇74穿戴装备的项目, 本章要做的事情是制作主角属性界面,实现在面板上显示主角的攻击力等数值 制作一个简易的主角界面(创建Image与Text显示即可) 创建一个空物体 重命名为PlayerInfo 在其子级下创…...
单片机嵌入式编程中常用技术点
Open CV,QT,Linux,多线程,网络编程,文件编程在单片机嵌入式编程中,这些技术在单片机嵌入式编程中的作用: 一、OpenCV 在单片机嵌入式编程中,虽然单片机的计算能力相对有限…...
【毕业论文+源码】基于ASP+NET的人事管理系统
引言 人事管理系统是针对企业内部人事管理设计,分角色实现对公司部门及各部门员工的增、删、改、查以及对员工考勤的管理。 编写目的: 在系统需求分析的基础上,对需求分析中产生的功能模块进行过程描述,设计功能模块的内部细节&…...
计算机毕业设计 校园志愿者管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…...
速通LLaMA2:《Llama 2: Open Foundation and Fine-Tuned Chat Models》全文解读
文章目录 概览LLaMA和LLaMA2的区别AbstractIntroductionPretrainingFine-tuning1. 概括2、Supervised Fine-Tuning(SFT)3、⭐Reinforcement Learning with Human Feedback(RLHF)🔺总览Training Objectives:…...
如何使用VM中win10搭建Hfish蜜罐(危险感知平台)。从下载到部署详细教程
得而不惜就该死。 -----古月方源 引言:最近跟一个老师做东西,叫我搞清楚蜜罐的搭建和一些底层逻辑,所以记录一下。 一、实验准备 (一)win10虚拟机 (若有需要可以后台私信) (二&…...
Rust: AES 加密算法库
在Rust中,进行AES加密通常会用到一些现有的库,因为Rust标准库中并不直接提供AES加密的API。一个非常流行的库是crypto-box或者更广泛使用的ring库,但ring库由于依赖问题有时可能难以编译,另一个常用的库是cryptography的Rust绑定&…...
猫抓插件:浏览器资源嗅探与下载的完整手册
猫抓插件:浏览器资源嗅探与下载的完整手册 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓(cat-catch)是一…...
从VOC到YOLO:用Labelimg标注后,一键转换数据格式的完整避坑指南
从VOC到YOLO:数据格式转换的工程化实践与避坑指南 当你用Labelimg完成目标检测任务的标注工作,看着满屏的XML文件,是否觉得离模型训练还差"最后一公里"?这恰恰是许多初学者从标注到训练的关键断裂点。本文将带你深入VOC…...
保姆级教程:用ESP32-S3和LVGL驱动3.5寸ILI9488屏幕(附常见编译错误解决)
ESP32-S3与LVGL实战:3.5寸ILI9488屏幕驱动全攻略与疑难解析 当创客们第一次拿到ESP32-S3开发板和3.5寸ILI9488屏幕时,往往会陷入既兴奋又困惑的状态——硬件连接看似简单,但真正要让屏幕亮起来并显示内容,却可能遭遇各种"坑…...
别再只怪外力了!手把手教你用砂纸“解剖”MLCC,排查电容失效真凶(附打磨实操图)
低成本破解MLCC失效之谜:砂纸打磨法的实战指南 当产线上突然出现大批量MLCC失效时,硬件工程师们常常陷入两难——既没有价值百万的金相显微镜,也无法承受将样品送往专业实验室的高昂成本和时间延误。这时,一套简单粗暴却行之有效的…...
Perplexity语言学习资源实战手册:7天掌握高效外语输入+输出闭环的3大核心技巧
更多请点击: https://intelliparadigm.com 第一章:Perplexity语言学习资源的核心定位与适用场景 Perplexity 作为一款以深度推理与实时信息整合见长的AI协作工具,其语言学习资源并非传统词典或语法教程的简单复刻,而是聚焦于**真…...
Android Studio中文界面终极解决方案:告别官方插件的兼容性烦恼
Android Studio中文界面终极解决方案:告别官方插件的兼容性烦恼 【免费下载链接】AndroidStudioChineseLanguagePack AndroidStudio中文插件(官方修改版本) 项目地址: https://gitcode.com/gh_mirrors/an/AndroidStudioChineseLanguagePack 还在为…...
告别手动重启!用Python+PyAutoGUI写个游戏防崩溃守护脚本(附完整源码)
告别手动重启!用PythonPyAutoGUI打造游戏防崩溃守护脚本 深夜挂机刷副本时突然游戏崩溃,第二天醒来发现角色还在主城发呆?竞技场自动匹配因为断线重连失败而错过赛季奖励?这些问题对于MMO玩家和挂机游戏爱好者来说简直如同噩梦。本…...
国产MCU生态构建与MM32系列选型开发实战解析
1. 项目概述:一场MCU生态的“集结号”2018年的那个秋天,对于国内嵌入式开发者,尤其是那些常年与ARM Cortex-M内核打交道的工程师们来说,记忆里应该有一场绕不开的盛会——灵动微电子举办的“2018灵动MM32协作大会”。这场大会的核…...
Folcolor:让你的Windows文件夹告别“黄脸婆“,用色彩提升3倍工作效率
Folcolor:让你的Windows文件夹告别"黄脸婆",用色彩提升3倍工作效率 【免费下载链接】Folcolor Windows explorer folder coloring utility 项目地址: https://gitcode.com/gh_mirrors/fo/Folcolor 想象一下这样的场景:你的电…...
Flet按钮控件终极指南:从基础到高级的完整样式定制教程
Flet按钮控件终极指南:从基础到高级的完整样式定制教程 【免费下载链接】flet Build realtime web, mobile and desktop apps in Python only. No frontend experience required. 项目地址: https://gitcode.com/gh_mirrors/fl/flet Flet是一个革命性的Pytho…...
