在 Python 编程中,functools 模块是一个非常实用但常被初学者忽视的标准库。它提供了一系列高阶函数,用于处理或返回其他函数,帮助我们写出更简洁、高效和可读性更强的代码。本文将带你从零开始,全面了解 Python functools 的核心功能,并通过大量示例让你轻松上手!
functools 是 Python 标准库中的一个模块,主要用于高阶函数操作,即那些接收函数作为参数或返回函数的函数。它最著名的功能包括 @lru_cache、@wraps、partial 等。
当你有一个计算成本较高的函数,并且会多次用相同参数调用它时,可以使用 @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)) # 输出:832040# 第二次调用直接从缓存读取,速度极快print(fibonacci(30)) # 输出:832040 maxsize 参数指定了缓存的最大条目数,当超过时会按照“最近最少使用”(LRU)策略自动清除旧数据。
在编写自己的装饰器时,如果不加处理,被装饰的函数会丢失其原始元数据(如 __name__、__doc__ 等)。这时就需要 @wraps 来“包裹”内部函数,保持原函数信息不变。
from functools import wrapsdef my_logger(func): @wraps(func) # 关键!保留 func 的元数据 def wrapper(*args, **kwargs): print(f"Calling function: {func.__name__}") return func(*args, **kwargs) return wrapper@my_loggerdef greet(name): """Say hello to someone.""" return f"Hello, {name}!"print(greet("Alice")) # 输出:Hello, Alice!print(greet.__name__) # 输出:greet(而不是 wrapper)print(greet.__doc__) # 输出:Say hello to someone. functools.partial 可以创建一个新函数,该函数是原函数的“偏函数”,即预先填入一部分参数,后续只需传入剩余参数即可。
from functools import partialdef multiply(x, y): return x * y# 创建一个新函数,固定第一个参数为 2double = partial(multiply, 2)print(double(5)) # 相当于 multiply(2, 5),输出:10print(double(10)) # 输出:20 通过本文,你已经掌握了 functools模块 的三大核心工具:@lru_cache(缓存装饰器)、@wraps(保留函数元信息)和 partial(参数固化)。这些工具不仅能提升代码性能,还能增强可维护性。
无论你是刚入门 Python 的新手,还是有一定经验的开发者,合理使用 Python functools 都能让你的代码更优雅、更高效。赶快在你的项目中试试吧!
SEO关键词提示:本文覆盖了 functools模块、Python functools、函数装饰器、缓存装饰器 等核心概念,适合搜索相关内容的开发者阅读。
本文由主机测评网于2025-12-20发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/20251210459.html