在 Python 里,函数不仅能执行逻辑、组织代码,还能像变量一样被传来传去、当做参数传递,这就为“高阶函数”打下了基础。掌握高阶函数,是写出优雅、简洁、可复用代码的关键一步。
参考文章:Python 高阶函数 | 简单一点学习 easyeasy.me
一、什么是高阶函数?
1.1 函数是“第一类对象”
在 Python 中,函数是“第一类对象”,意味着:
- 函数可以赋值给变量
- 函数可以作为参数传递
- 函数可以作为返回值返回
def greet(name):
return f"Hello, {name}"
say_hello = greet
print(say_hello("Alice")) # Hello, Alice
1.2 高阶函数的定义
如果一个函数满足以下任意一个条件,它就是高阶函数:
- 接收一个或多个函数作为参数
- 返回一个函数
二、内置高阶函数速览
Python 提供了几个常用的内置高阶函数,非常实用,咱们一个个来看:
2.1 map()
: 映射操作
对可迭代对象里的每个元素执行函数操作。
nums = [1, 2, 3, 4]
squared = map(lambda x: x ** 2, nums)
print(list(squared)) # [1, 4, 9, 16]
2.2 filter()
: 过滤操作
保留符合条件的元素。
nums = [1, 2, 3, 4, 5]
evens = filter(lambda x: x % 2 == 0, nums)
print(list(evens)) # [2, 4]
2.3 reduce()
: 累计计算
来自 functools
,把所有元素用一个函数合并成一个结果。
from functools import reduce
nums = [1, 2, 3, 4]
total = reduce(lambda x, y: x + y, nums)
print(total) # 10
2.4 sorted()
:自定义排序
key
参数可以传函数,对排序方式进行控制。
words = ["banana", "apple", "cherry"]
sorted_words = sorted(words, key=lambda x: len(x))
print(sorted_words) # ['apple', 'banana', 'cherry']
三、函数作为返回值
Python 函数里可以定义另一个函数,然后返回它。可以根据外部参数“动态生成”函数。
def make_multiplier(factor):
def multiply(x):
return x * factor
return multiply
double = make_multiplier(2)
print(double(5)) # 10
这个技巧非常强大,比如可以创建日志包装器、延迟执行函数等。
四、函数作为参数传递
你可以将一个函数作为参数传递给另一个函数,从而定制行为。
def apply_func(x, func):
return func(x)
print(apply_func(3, lambda x: x ** 3)) # 27
这个模式在很多地方都有用,比如回调函数、策略模式、装饰器等。
五、常见使用场景
5.1 数据处理
高阶函数和匿名函数(lambda
)搭配,可以让代码更简洁:
data = [" hello ", " world ", "Python "]
cleaned = map(lambda s: s.strip().upper(), data)
print(list(cleaned)) # ['HELLO', 'WORLD', 'PYTHON']
5.2 条件过滤
filter()
+ lambda
是处理大量数据时的利器:
nums = range(100)
div_by_7 = filter(lambda x: x % 7 == 0, nums)
print(list(div_by_7))
六、组合函数:函数的嵌套与链式调用
高阶函数常用于函数式编程,像流水线一样地组合操作:
from functools import reduce
words = ["python", "is", "awesome"]
result = reduce(lambda x, y: x + " " + y.upper(), words, "")
print(result.strip()) # python IS AWESOME
七、进阶:自定义高阶函数
你完全可以写出自己的高阶函数,来封装常用逻辑:
def repeat(n):
def decorator(func):
def wrapper(*args, **kwargs):
for _ in range(n):
func(*args, **kwargs)
return wrapper
return decorator
@repeat(3)
def greet():
print("Hi!")
greet()
八、总结
- 高阶函数就是可以接收函数或者返回函数的函数。
- 它能让代码更简洁、可复用、更灵活。
map()
、filter()
、reduce()
是最常见的高阶函数应用。- 在数据处理、回调、装饰器等场景中,高阶函数非常常用。