Python3 【高阶函数】项目实战:5 个学习案例

Python3 【高阶函数】项目实战:5 个学习案例

本文包含 5 个关于“高阶函数”的综合应用项目,每个项目都包含完整的程序代码、测试案例和执行结果。具体项目是:

  1. 成绩统计分析
  2. 单词统计工具
  3. 简易计算器工厂
  4. 任务调度器
  5. 数据管道处理

项目 1:成绩统计分析

功能描述

  • 使用 mapfilter 对学生成绩进行转换和筛选。
  • 计算平均成绩并使用 reduce 实现。

代码:

from functools import reduce# 学生成绩数据
students = [{"name": "Alice", "score": 85},{"name": "Bob", "score": 90},{"name": "Charlie", "score": 78},{"name": "David", "score": 92},
]# 1. 使用 map 提取所有成绩
scores = list(map(lambda x: x["score"], students))
print("所有成绩:", scores)# 2. 使用 filter 筛选出及格的学生(假设及格线为 80)
passed_students = list(filter(lambda x: x["score"] >= 80, students))
print("及格学生:", passed_students)# 3. 使用 reduce 计算平均成绩
average_score = reduce(lambda x, y: x + y, scores) / len(scores)
print("平均成绩:", average_score)

输出:

所有成绩: [85, 90, 78, 92]
及格学生: [{'name': 'Alice', 'score': 85}, {'name': 'Bob', 'score': 90}, {'name': 'David', 'score': 92}]
平均成绩: 86.25

项目 2:单词统计工具

功能描述

  • 使用 mapfilter 对文本中的单词进行处理。
  • 统计单词长度分布。

代码:

# 示例文本
text = "Python is a powerful programming language. Python is easy to learn."# 1. 使用 map 将文本拆分为单词并转换为小写
words = list(map(lambda x: x.lower(), text.split()))
print("单词列表:", words)# 2. 使用 filter 筛选出长度大于 4 的单词
long_words = list(filter(lambda x: len(x) > 4, words))
print("长度大于 4 的单词:", long_words)# 3. 统计单词长度分布
from collections import defaultdict
word_length_count = defaultdict(int)
for word in words:word_length_count[len(word)] += 1
print("单词长度分布:", dict(word_length_count))

输出:

单词列表: ['python', 'is', 'a', 'powerful', 'programming', 'language.', 'python', 'is', 'easy', 'to', 'learn.']
长度大于 4 的单词: ['python', 'powerful', 'programming', 'language.', 'python', 'learn.']
单词长度分布: {6: 3, 2: 3, 1: 1, 8: 1, 11: 1, 9: 1, 4: 1} 

项目 3:简易计算器工厂

功能描述

  • 使用高阶函数创建加减乘除的计算器函数。

代码:

# 计算器工厂函数
def create_calculator(operation):if operation == "add":return lambda x, y: x + yelif operation == "subtract":return lambda x, y: x - yelif operation == "multiply":return lambda x, y: x * yelif operation == "divide":return lambda x, y: x / y if y != 0 else "Error: Division by zero"else:return lambda x, y: "Invalid operation"# 创建计算器
add = create_calculator("add")
subtract = create_calculator("subtract")
multiply = create_calculator("multiply")
divide = create_calculator("divide")# 测试计算器
print("10 + 5 =", add(10, 5))
print("10 - 5 =", subtract(10, 5))
print("10 * 5 =", multiply(10, 5))
print("10 / 5 =", divide(10, 5))
print("10 / 0 =", divide(10, 0))

输出:

10 + 5 = 15
10 - 5 = 5
10 * 5 = 50
10 / 5 = 2.0
10 / 0 = Error: Division by zero

项目 4:任务调度器

功能描述

  • 使用高阶函数实现任务调度,支持添加任务和执行任务。

代码:

# 任务调度器
class TaskScheduler:def __init__(self):self.tasks = []# 添加任务def add_task(self, task):self.tasks.append(task)# 执行所有任务def run_tasks(self):for task in self.tasks:task()# 示例任务
def task1():print("执行任务 1")def task2():print("执行任务 2")# 创建调度器并添加任务
scheduler = TaskScheduler()
scheduler.add_task(task1)
scheduler.add_task(task2)# 执行任务
scheduler.run_tasks()

输出:

执行任务 1
执行任务 2

项目 5:数据管道处理

功能描述

  • 使用高阶函数实现数据管道,支持链式处理数据。

代码:

# 数据管道类
class DataPipeline:def __init__(self, data):self.data = data# 添加处理步骤def add_step(self, step):self.data = list(map(step, self.data))return self# 获取结果def get_result(self):return self.data# 示例数据
data = [1, 2, 3, 4, 5]# 创建管道并添加处理步骤
pipeline = DataPipeline(data)
result = pipeline.add_step(lambda x: x * 2) \.add_step(lambda x: x + 1) \.get_result()print("处理结果:", result)

输出:

处理结果: [3, 5, 7, 9, 11]

总结

以上 5 个迷你项目展示了高阶函数在实际开发中的应用,通过这些项目,可以更好地理解高阶函数的作用和优势。

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

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

相关文章

【Git】初识Git Git基本操作详解

文章目录 学习目标Ⅰ. 初始 Git💥注意事项 Ⅱ. Git 安装Linux-centos安装Git Ⅲ. Git基本操作一、创建git本地仓库 -- git init二、配置 Git -- git config三、认识工作区、暂存区、版本库① 工作区② 暂存区③ 版本库④ 三者的关系 四、添加、提交更改、查看提交日…

使用 Spring JDBC 进行数据库操作:深入解析 JdbcTemplate

目录 1. Spring JDBC 简介 2. JdbcTemplate 介绍 3. 创建数据库和表 4. 配置 Spring JDBC 5. 创建实体类 6. 使用 JdbcTemplate 实现增、删、改、查操作 7. Spring JDBC 优点 8. 小结 1. Spring JDBC 简介 Spring JDBC 是 Spring 框架中的一个模块,旨在简化…

BUUCTF [Black Watch 入群题]PWN1 题解

1.下载文件 exeinfo checksec 32位 IDA32 看到关键函数 read两次 第一次read的变量s在bss段;第二次的buf到ebp距离为 24 但是第二次的read字节只能刚好填满返回地址 传不进去变量 所以想到栈迁移 将栈移动到变量s所在位置上来 同时 这题开了NX 无直接的binsh和s…

Cubemx文件系统挂载多设备

cubumx版本:6.13.0 芯片:STM32F407VET6 在上一篇文章中介绍了Cubemx的FATFS和SD卡的配置,由于SD卡使用的是SDIO通讯,因此具体驱动不需要自己实现,Cubemx中就可以直接配置然后生成SDIO的驱动,并将SD卡驱动和…

java练习(2)

回文数(题目来自力扣) 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数 是指正序(从左向右)和倒序(从右向左)读都是一样的整…

使用 Tauri 2 + Next.js 开发跨平台桌面应用实践:Singbox GUI 实践

Singbox GUI 实践 最近用 Tauri Next.js 做了个项目 - Singbox GUI,是个给 sing-box 用的图形界面工具。支持 Windows、Linux 和 macOS。作为第一次接触这两个框架的新手,感觉收获还蛮多的,今天来分享下开发过程中的一些经验~ 为啥要做这个…

ComfyUI安装调用DeepSeek——DeepSeek多模态之图形模型安装问题解决(ComfyUI-Janus-Pro)

ComfyUI 的 Janus-Pro 节点,一个统一的多模态理解和生成框架。 试用: https://huggingface.co/spaces/deepseek-ai/Janus-1.3B https://huggingface.co/spaces/deepseek-ai/Janus-Pro-7B https://huggingface.co/spaces/deepseek-ai/JanusFlow-1.3B 安装…

索引的底层数据结构、B+树的结构、为什么InnoDB使用B+树而不是B树呢

索引的底层数据结构 MySQL中常用的是Hash索引和B树索引 Hash索引:基于哈希表实现的,查找速度非常快,但是由于哈希表的特性,不支持范围查找和排序,在MySQL中支持的哈希索引是自适应的,不能手动创建 B树的…

RK3568中使用QT opencv(显示基础图像)

文章目录 一、查看对应的开发环境是否有opencv的库二、QT使用opencv一、查看对应的开发环境是否有opencv的库 在开发板中的/usr/lib目录下查看是否有opencv的库: 这里使用的是正点原子的ubuntu虚拟机,在他的虚拟机里面已经安装好了opencv的库。 二、QT使用opencv 在QT pr…

29.Word:公司本财年的年度报告【13】

目录 NO1.2.3.4 NO5.6.7​ NO8.9.10​ NO1.2.3.4 另存为F12:考生文件夹:Word.docx选中绿色标记的标题文本→样式对话框→单击右键→点击样式对话框→单击右键→修改→所有脚本→颜色/字体/名称→边框:0.5磅、黑色、单线条:点…

省级-新质生产力数据(2010-2022年)-社科数据

省级-新质生产力数据(2010-2022年)-社科数据https://download.csdn.net/download/paofuluolijiang/90028612 https://download.csdn.net/download/paofuluolijiang/90028612 新质生产力是指在现代科技和经济社会发展的推动下,由新的生产要素…

【PyTorch】7.自动微分模块:开启神经网络 “进化之门” 的魔法钥匙

目录 1. 梯度基本计算 2. 控制梯度计算 3. 梯度计算注意 4. 小节 个人主页:Icomi 专栏地址:PyTorch入门 在深度学习蓬勃发展的当下,PyTorch 是不可或缺的工具。它作为强大的深度学习框架,为构建和训练神经网络提供了高效且灵活…

【数据分析】案例04:豆瓣电影Top250的数据分析与Web网页可视化(numpy+pandas+matplotlib+flask)

豆瓣电影Top250的数据分析与Web网页可视化(numpy+pandas+matplotlib+flask) 豆瓣电影Top250官网:https://movie.douban.com/top250写在前面 实验目的:实现豆瓣电影Top250详情的数据分析与Web网页可视化。电脑系统:Windows使用软件:PyCharm、NavicatPython版本:Python 3.…

Ubuntu20.04 深度学习环境配置(持续完善)

文章目录 常用的一些命令安装 Anaconda创建conda虚拟环境查看虚拟环境大小 安装显卡驱动安装CUDA安装cuDNN官方仓库安装 cuDNN安装 cuDNN 库验证 cuDNN 安装确认 CUDA 和 cuDNN 是否匹配: TensorRT下载 TensorRT安装 TensorRT 本地仓库配置 GPG 签名密钥安装 Tensor…

元宇宙与Facebook:社交互动的未来方向

随着技术的飞速发展,元宇宙逐渐成为全球科技领域关注的焦点。作为一种集沉浸式体验、虚拟空间和数字社交互动为一体的新型平台,元宇宙正在重新定义人类的社交方式。而在这一变革中,Facebook(现改名为Meta)作为全球领先…

【赵渝强老师】K8s中Pod探针的ExecAction

在K8s集群中,当Pod处于运行状态时,kubelet通过使用探针(Probe)对容器的健康状态执行检查和诊断。K8s支持三种不同类型的探针,分别是:livenessProbe(存活探针)、readinessProbe&#…

python 语音识别

目录 一、语音识别 二、代码实践 2.1 使用vosk三方库 2.2 使用SpeechRecognition 2.3 使用Whisper 一、语音识别 今天识别了别人做的这个app,觉得虽然是个日记app 但是用来学英语也挺好的,能进行语音识别,然后矫正语法,自己说的时候 ,实在不知道怎么说可以先乱说,然…

Node.js——body-parser、防盗链、路由模块化、express-generator应用生成器

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…

PPT演示设置:插入音频同步切换播放时长计算

PPT中插入音频&同步切换&放时长计算 一、 插入音频及音频设置二、设置页面切换和音频同步三、播放时长计算 一、 插入音频及音频设置 1.插入音频:点击菜单栏插入-音频-选择PC上的音频(已存在的音频)或者录制音频(现场录制…

3D图形学与可视化大屏:什么是材质属性,有什么作用?

一、颜色属性 漫反射颜色 漫反射颜色决定了物体表面对入射光进行漫反射后的颜色。当光线照射到物体表面时,一部分光被均匀地向各个方向散射,形成漫反射。漫反射颜色的选择会直接影响物体在光照下的外观。例如,一个红色的漫反射颜色会使物体在…