当前位置: 首页 > article >正文

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 + y
    elif operation == "subtract":
        return lambda x, y: x - y
    elif operation == "multiply":
        return lambda x, y: x * y
    elif 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.kler.cn/a/522178.html

相关文章:

  • vue-有关于TS与路由器
  • 16届蓝桥杯寒假刷题营】第2期DAY5IOI赛
  • 【javaweb项目idea版】蛋糕商城(可复用成其他商城项目)
  • Web 代理、爬行器和爬虫
  • 【PowerQuery专栏】PowerQuery实现数据库访问系列函数
  • RK3588平台开发系列讲解(ARM篇)ARM64底层中断处理
  • linux网络 | TCP可靠性策略之连接管理、滑动窗口、拥塞控制
  • CSS Fonts(字体)
  • Yolo11 + OCR 营业执照识别+信息抽取(预期后续改用其他ocr更简单,推理预计使用onnxruntim加速,分c++和python两种方式部署)
  • C#,入门教程(04)——Visual Studio 2022 数据编程实例:随机数与组合
  • Python3 OS模块中的文件/目录方法说明十三
  • 通过Redis命令建立锁机制
  • 字符设备驱动模版-中断
  • 5.1.4 软件工具+开发环境
  • 【Docker】Docker入门了解
  • 本地大模型编程实战(04)给文本自动打标签
  • 【Spring】Spring概述
  • 寒假1.26
  • 【深度学习】常见模型-Transformer模型
  • 基于微信小程序游泳馆管理系统 游泳馆管理系统小程序 (设计与实现)
  • 梯度下降优化算法-RMSProp
  • 【源码+文档+调试讲解】基于Spring Boot的摇滚乐鉴赏网站的设计与实现
  • Git 出现 Please use your personal access token instead of the password 解决方法
  • 发布 VectorTraits v3.1(支持 .NET 9.0,支持 原生AOT)
  • 基于微信小程序的助农扶贫系统设计与实现(LW+源码+讲解)
  • 98.1 AI量化开发:长文本AI金融智能体(Qwen-Long)对金融研报大批量处理与智能分析的实战应用