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

Python中的高阶函数

一.什么是高阶函数

高阶函数是函数式编程核心概念之一,它是指能够接受函数作为参数或者返回函数作为结果的函数。在Python中,函数可以像普通变量一样被传递和操作,这为高阶函数的使用提供了基础。

高阶函数的两个主要特点:

(1)接受函数作为参数:可以将函数作为参数传递给另一个函数

(2)返回结果作为参数:函数可以作为另一个函数的返回值

为什么要使用高阶函数

(1)提高代码的抽象程度

(2)减少代码重复

(3)增强代码的灵活性和可延展性

二.Python中的内置高阶函数

Python中有许多内置的高阶函数,可以使我们的工作更加便利。

1.map()函数

map()将函数应用于可迭代对象的每个元素,返回一个迭代器。

numbers = [1, 2, 3, 4]
squared = map(lambda x: x**2, numbers)
print(list(squared))  # [1, 4, 9, 16]

2.filter()函数

filter()过滤掉函数返回False的元素,返回一个迭代器。

numbers = [1, 2, 3, 4]
evens = filter(lambda x: x%2 == 0, numbers)
print(list(evens))  # [2, 4]

3.reduce()函数

reduce()对可迭代对象中的元素进行累积运算。

from functools import reduce
numbers = [1, 2, 3, 4]
sum = reduce(lambda x,y: x+y, numbers)
print(sum)  # 10

4.sorted()函数

sorted()根据key函数对可迭代对象进行排序。

students = [{'name':'Alice','age':20}, {'name':'Bob','age':18}]
sorted_students = sorted(students, key=lambda x: x['age'])
print(sorted_students)  # [{'name': 'Bob', 'age': 18}, {'name': 'Alice', 'age': 20}]

5.any()函数和all()函数

any()任意元素为True返回为True。

all()所有元素为True返回为True。

numbers = [0, 1, 2]
print(any(numbers))  # True
print(all(numbers))  # False

6.labmda()函数(匿名函数)

lambda函数是一种简洁的定义单行函数的方式,也称为匿名函数(因为它没有函数名)。

lambda 参数: 表达式

特点:

只能包含一个表达式

不需要return语句,结果自动返回

适合简单的函数逻辑

示例1:简单计算

# 普通函数
def square(x):return x * x# lambda等效写法
square = lambda x: x * xprint(square(5))  # 输出: 25

示例2:配合高阶函数使用

# 配合map使用
numbers = [1, 2, 3, 4]
squared = list(map(lambda x: x**2, numbers))
print(squared)  # 输出: [1, 4, 9, 16]# 配合filter使用
evens = list(filter(lambda x: x%2 == 0, numbers))
print(evens)  # 输出: [2, 4]

三.高阶函数简单实战:学生成绩处理

案例:处理班级学生成绩数据

假设我们有一个班级的学生成绩列表,每个学生是一个字典,包含姓名和成绩:

students = [{"name": "张三", "score": 85},{"name": "李四", "score": 92},{"name": "王五", "score": 78},{"name": "赵六", "score": 65},{"name": "钱七", "score": 88}
]

1.筛选及格的学生

2.计算平均分

3.找出成绩最好的学生

4.按成绩从高到低排序

示例:

students = [{"name": "张三", "score": 85},{"name": "李四", "score": 92},{"name": "王五", "score": 78},{"name": "赵六", "score": 65},{"name": "钱七", "score": 88}
]# 1. 筛选及格学生
passed = list(filter(lambda s: s["score"] >= 60, students))# 2. 计算平均分
from functools import reduce
avg = reduce(lambda x, y: x + y["score"], students, 0) / len(students)# 3. 找出最高分学生
top = max(students, key=lambda s: s["score"])# 4. 成绩排序
sorted_students = sorted(students, key=lambda s: s["score"], reverse=True)# 输出结果
print("及格学生:", passed)
print(f"班级平均分: {avg:.1f}")
print("最高分学生:", top["name"], top["score"])
print("成绩排名:", [(s["name"], s["score"]) for s in sorted_students])

http://www.dtcms.com/a/327311.html

相关文章:

  • vue+Django农产品推荐与价格预测系统、双推荐+机器学习预测+知识图谱
  • 六、SpringBoot多环境开发
  • 【Unity笔记】视频播放控制器全攻略:支持延迟播放、事件回调与多视频管理的完整实现
  • Linux 系统下 VS Code 降级至 1.85 版本教程:通过历史版本网站解决兼容性问题
  • 二叉树(七)--完全二叉树的节点个数
  • Day13 Vue工程化
  • mysql 简单操作手册
  • 行业分享丨SimSolid 在汽车零部件开发中应用的可行性调研及实践
  • 鸿蒙har包打包与引用,其它主工程entry引用本地har
  • Wireshark专家模式定位网络故障:14种TCP异常深度解剖
  • 西门子S7-200与S7-1200通过PPI以太网模块通讯,赋能汽车制造行业发展
  • 人机交互:连接人类与数字世界的桥梁
  • 【k8s】pvc 配置的两种方式volumeClaimTemplates 和 PersistentVolumeClaim
  • 计算机网络1-8:第一章 概述 习题课
  • UserController类讲解
  • Git 撤回已推送到远程的最近push
  • Linux 服务器,安装mqtt服务
  • AuthController类讲解
  • 思科、华为、华三如何切换三层端口?
  • 前端面试题汇总--Vue2篇
  • 网络安全:如何保障社交媒体账户的安全?
  • 导入文件到iPhone实现
  • Python打卡Day40 训练和测试的规范写法
  • iOS 编译 cpp 代码生成 .a 库备忘
  • 【测试】Bug+设计测试用例
  • 华为发布AI推理新技术,降低对HBM内存依赖
  • C语言—数组和指针练习题合集(二)
  • 终端安全检测和防御技术总结
  • 2025年Java后端秋招面试宝典:高频题库+场景解析
  • wordpress从wp_nav_menu中获取菜单项