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])