在 Python functools模块 中,提供了一系列高阶函数和工具,用于对其他函数进行操作或增强。无论你是刚入门的编程小白,还是有一定经验的开发者,掌握 functools 都能让你写出更优雅、高效的代码。

Python 的 functools 是标准库中的一个模块,主要用于高阶函数(即操作或返回函数的函数)。它提供了如缓存、偏函数、函数比较等实用工具,是编写函数式风格代码的重要助手。
当你有一个计算成本较高的函数,并且经常用相同参数调用它时,可以使用 @lru_cache 装饰器来缓存结果,避免重复计算。
from functools import lru_cache@lru_cache(maxsize=128)def fibonacci(n): if n < 2: return n return fibonacci(n - 1) + fibonacci(n - 2)print(fibonacci(30)) # 第一次计算较慢print(fibonacci(30)) # 第二次直接从缓存读取,极快!maxsize 参数指定缓存的最大条目数,设为 None 表示无限制。这是提升递归或重复调用性能的利器。
有时你想“冻结”一个函数的部分参数,生成一个新函数。这时可以用 partial。
from functools import partialdef multiply(x, y): return x * y# 创建一个新函数,固定 y=10double = partial(multiply, y=10)print(double(5)) # 输出: 50print(double(3)) # 输出: 30这在回调函数、配置默认参数等场景非常有用。
自定义装饰器时,如果不处理,会丢失原函数的名称、文档等信息。使用 @wraps 可以解决这个问题。
from functools import wrapsdef my_decorator(func): @wraps(func) def wrapper(*args, **kwargs): print("调用前执行...") result = func(*args, **kwargs) print("调用后执行...") return result return wrapper@my_decoratordef greet(name): """向某人问好""" return f"Hello, {name}!"print(greet.__name__) # 输出: greet(而不是 wrapper)print(greet.__doc__) # 输出: 向某人问好reduce(function, iterable):虽然现在更多用 itertools 或列表推导式,但 functools.reduce 仍可用于累积计算。cmp_to_key:将旧式比较函数转换为 key 函数,用于排序。total_ordering:只需定义 __eq__ 和一个比较方法(如 __lt__),即可自动生成所有比较方法。通过本教程,我们详细介绍了 Python functools模块 的核心功能,包括:
@lru_cache 提升性能partial 固定部分参数@wraps 保持函数元信息这些工具不仅能让你的代码更简洁,还能显著提升程序效率。建议在实际项目中多加练习,逐步掌握函数式编程的精髓。
掌握 functools,是迈向 Python 高级编程的重要一步!
本文由主机测评网于2025-12-13发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025127182.html