functools 是 Python 标准库中一个极为实用的模块,提供了许多用于处理函数、高阶函数以及函数式编程的工具。
用途: 创建一个新函数,它固定了原函数的部分参数。
示例:
from functools import partialdef power(base, exponent): return base ** exponent# 创建一个固定底数为2的新函数square = partial(power, base=2)# 调用新函数只需传递指数print(square(3)) # 输出: 8
用途: 在编写装饰器时,保持被装饰函数的元信息(如名称、文档字符串、注解等)不变。
示例:
from functools import wrapsdef add_logging(func): @wraps(func) def wrapper(*args, **kwargs): print(f"Calling {func.__name__} with arguments {args}, {kwargs}") result = func(*args, **kwargs) print(f"{func.__name__} returned: {result}") return result return wrapper@add_loggingdef greet(name): """Greet someone by their name.""" return f"Hello, {name}!"print(greet.__name__) # 输出: greetprint(greet.__doc__) # 输出: Greet someone by their name.greet("Alice") # 输出: Calling greet with arguments ('Alice',), {} 和 "greet returned: Hello, Alice!"
用途: 通过实现一个或少数几个关键比较方法(如 __eq__ 和 __lt__),自动为一个类生成所有必要的比较方法(如 __le__, __gt__, __ge__, __ne__)。
示例:
from functools import total_ordering@total_orderingclass Person: def __init__(self, name, age): self.name = name self.age = age def __eq__(self, other): return self.name == other.name and self.age == other.age def __lt__(self, other): return self.age < other.age# 自动拥有所有比较方法,如 __le__, __gt__, __ge__, __ne__p1 = Person("Alice", 25)p2 = Person("Bob", 30)print(p1 <= p2) # 输出: Trueprint(p1 > p2) # 输出: False
用途: 实现函数结果的缓存,以提高性能。基于“最近最少使用”(Least Recently Used, LRU)策略自动丢弃旧的缓存项。
示例:
from functools import lru_cache@lru_cache(maxsize=32)def fibonacci(n): if n < 2: return n return fibonacci(n - 1) + fibonacci(n - 2)# 多次调用相同参数时,从缓存中获取结果,避免重复计算print(fibonacci(20)) # 第一次调用进行计算print(fibonacci(20)) # 第二次调用直接使用缓存
用途: 对一个可迭代对象(如列表)应用一个累积函数,从左到右将元素两两结合,返回单一结果。
示例:
from functools import reducenumbers = [1, 2, 3, 4, 5]# 计算列表元素的乘积product = reduce(lambda x, y: x * y, numbers)print(product) # 输出: 120
用途: 将旧式的比较函数(接受两个参数并返回负数、零或正数表示小于、等于或大于)转换为可用于排序的键函数。
示例:
from functools import cmp_to_keydef compare_names(name1, name2): if name1 < name2: return -1 elif name1 > name2: return 1 else: return 0names = ["Alice", "Bob", "Charlie", "David"]# 使用旧式比较函数进行排序sorted_names = sorted(names, key=cmp_to_key(compare_names))print(sorted_names) # 输出: ['Alice', 'Bob', 'Charlie', 'David']
涵盖了 functools 模块中一些常用且重要的功能,包括部分函数应用、装饰器元信息保留、简化类比较方法、函数缓存、累积计算以及旧式比较函数的转换。根据实际需求,可以灵活运用这些工具来增强代码的简洁性、效率和可读性。
本文链接:http://www.28at.com/showinfo-26-86210-0.htmlPython库functools示例详解
声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com
上一篇: Python 处理图片的十个库
下一篇: C++函数传递二维数组的三种方法