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三、认识工作区、暂存区、版本库① 工作区② 暂存区③ 版本库④ 三者的关系 四、添加、提交更改、查看提交日…

RK3568使用QT操作LED灯

文章目录 一、QT中操作硬件设备思路Linux 中的设备文件操作硬件设备的思路1. 打开设备文件2. 写入数据到设备3. 从设备读取数据4. 设备控制5. 异常处理在 Qt 中操作设备的典型步骤实际应用中的例子:控制 LED总结二、QT实战操作LED灯设备1. `mainwindow.h` 头文件2. `mainwindo…

分布式微服务系统架构第90集:现代化金融核心系统

#1.1 深化数字化转型,核心面临新挑战 1、架构侧:无法敏捷协同数字金融经营模式转型。 2、需求侧:业务需求传导低效始终困扰金融机构。 3、开发侧:创新产品上市速度低于期望。 4、运维侧:传统面向资源型监控体系难以支撑…

使用 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…

CentOS 上安装 Go (Golang)

1. 检查系统环境 确保系统为 CentOS 7 或 CentOS 8,或者其他兼容的 Linux 发行版。 cat /etc/os-release2. 安装依赖 安装一些必要的工具: sudo yum update -y sudo yum install -y wget tar3. 下载 Go 从 Go 官方下载页面获取适用于 Linux 的最新版…

chrome源码剖析—进程通信

Chrome 浏览器采用多进程架构(multi-process architecture),这种架构使得每个浏览器标签、扩展、插件、GPU 渲染等都在独立的进程中运行。为了确保不同进程之间的高效通信,Chrome 使用 进程间通信(IPC, Inter-Process …

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磅、黑色、单线条:点…

【数据分析】案例03:当当网近30日热销图书的数据采集与可视化分析(scrapy+openpyxl+matplotlib)

当当网近30日热销图书的数据采集与可视化分析(scrapy+openpyxl+matplotlib) 当当网近30日热销书籍官网写在前面 实验目的:实现当当网近30日热销图书的数据采集与可视化分析。 电脑系统:Windows 使用软件:Visual Studio Code Python版本:python 3.12.4 技术需求:scrapy、…

数据库对象

数据库对象 数据库对象是构成数据库结构的基本单位,它们定义了数据库存储的数据类型、数据的组织方式以及数据之间的关系。在数据库中,对象可以包括表,视图,索引,触发器,存储过程,函数等多种类…

Super AGI 2025 ,人形机器人,芯片半导体,价值+量化投资最佳实践

Super AGI 2025:人形机器人、芯片半导体与价值量化投资最佳实践 关键词:Super AGI、人形机器人、芯片半导体、价值投资、量化投资、技术趋势、投资策略 摘要:本文探讨了Super AGI、人形机器人和芯片半导体领域的发展前景,并结合价…

AI学习指南Ollama篇-使用Ollama构建自己的私有化知识库

一、引言 (一)背景介绍 随着企业对数据隐私和效率的重视,私有化知识库的需求日益增长。私有化知识库不仅可以保护企业数据的安全性,还能提供高效的知识管理和问答系统,提升企业内部的工作效率和创新能力。 (二)Ollama和AnythingLLM的结合 Ollama和AnythingLLM的结合…

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

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

用一个例子详细说明python单例模式

单例模式是一种设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问该实例。这在需要控制资源(如数据库连接、文件系统等)的访问时非常有用。 下面是一个使用Python实现单例模式的例子: class Singleton:…