Python生成器基础与内存效率提升
生成器是Python中一种特殊的迭代器,使用yield语句逐步产生值,而非一次性构建整个序列。这种惰性求值特性使其在处理大规模数据流时显著提升内存效率。例如,读取大型文件时,生成器允许逐行处理,避免将整个文件加载至内存。以下代码展示了一个简单的生成器函数,用于生成指定范围内的偶数序列:
生成斐波那契数列的经典实现
def even_numbers(limit): num = 0 while num <= limit: yield num num += 2# 使用生成器迭代for n in even_numbers(10): print(n) # 输出: 0, 2, 4, 6, 8, 10
装饰器优化代码结构与可读性
装饰器通过高阶函数实现代码复用,能够在不修改原函数逻辑的前提下添加功能。这种特性特别适用于日志记录、权限验证和性能监控等横切关注点。以下缓存装饰器示例通过避免重复计算提升程序效率:
实现智能缓存机制
from functools import wrapsdef cache_decorator(func): stored_results = {} @wraps(func) def wrapper(args): if args not in stored_results: stored_results[args] = func(args) return stored_results[args] return wrapper@cache_decoratordef factorial(n): return 1 if n <= 1 else n factorial(n-1)生成器表达式与列表推导式的对比
生成器表达式使用圆括号语法,相比列表推导式更节省内存。当处理大规模数据且不需要随机访问时,生成器表达式可通过迭代方式逐步产生数据。例如求和操作中,生成器避免创建中间列表:
内存使用效率对比
# 列表推导式(立即占用内存)list_comp = [x2 for x in range(1000000)]# 生成器表达式(惰性计算)gen_exp = (x2 for x in range(1000000))print(sum(gen_exp)) # 内存友好型计算
装饰器链与功能组合
多个装饰器可以堆叠使用,通过自上而下的应用顺序实现功能组合。这种模式增强了代码的模块化程度,例如同时添加验证和日志功能:
多层级装饰器应用
def validation_decorator(func): def wrapper(value): if not isinstance(value, int): raise ValueError(必须输入整数) return func(value) return wrapper@cache_decorator@validation_decoratordef process_data(value): return value 2
yield from语法与生成器委托
Python 3.3引入的yield from语法简化了生成器的嵌套操作,允许直接委托给子生成器。这在处理多层嵌套数据结构时能显著提升代码可读性:
扁平化嵌套生成器
def flatten(nested_list): for sublist in nested_list: if isinstance(sublist, list): yield from flatten(sublist) else: yield sublist
上下文管理器装饰器模式
通过结合装饰器和上下文管理器,可以创建资源自动管理的安全操作环境。以下示例确保数据库连接在使用后自动关闭:
资源管理自动化
from contextlib import contextmanager@contextmanagerdef db_connection(connection_string): conn = create_connection(connection_string) try: yield conn finally: conn.close()# 使用示例with db_connection(localhost:5432) as conn: conn.execute_query(SELECT FROM table)
682

被折叠的 条评论
为什么被折叠?



