本文深入探讨Python生成器与协程的核心机制,从迭代器协议到异步编程,带你全面掌握这一高效编程范式。前言在Python编程中,处理大规模数据时,内存效率往往成为性能瓶颈。传统的列表存储方式会将所有数据一次性加载到内存中,当数据量达到百万甚至亿级别时,程序很容易因内存耗尽而崩溃。生成器(Generator)的出现完美解决了这一问题——它采用"惰性求值"策略,按需生成数据,极大降低了内存占用。而协程(Coroutine)则是在生成器基础上发展而来的异步编程利器,它让Python能够以单线程实现高并发,彻底改变了我们编写网络IO密集型应用的方式。本篇文章将系统性地讲解:迭代器协议的底层实现生成器的各种高级用法协程与异步编程的核心概念实际场景中的应用技巧目录迭代器协议:可迭代对象的基石生成器函数:yield的魔力生成器表达式:简洁的惰性计算生成器的高级状态控制yield from:优雅的委托机制协程基础:async与await生成器与协程的区别实际应用场景性能对比:生成器vs列表总结一、迭代器协议:可迭代对象的基石1.1 什么是迭代器协议Python的迭代器协议定义了两个核心方法:__iter__():返回迭代器对象自身__next__():返回序列中的下一个值,无元素时抛出StopIteration异常任何实现了这两个方法的对象都被称为迭代器(Iterator)。1.2 自定义迭代器示例class CountDown: """自定义倒计时迭代器""" def __init__(self, start): self.start = start def __iter__(self): # 返回迭代器对象自身 return self def __next__(self): # 返回下一个值,或抛出StopIteration if self.start = 0: raise StopIteration self.start -= 1 return self.start + 1 # 使用自定义迭代器 counter = CountDown(5) for num in counter: print(num, end=' ') # 输出: 5 4 3 2 11.3 可迭代对象 vs 迭代器特性可迭代对象(Iterable)迭代器(Iterator)定义实现了__iter__()实现了__iter__()和__next__()可重复使用✅ 是❌ 否(一次性)示例list, tuple, str, dict生成器、文件对象获取迭代器iter(obj)自身就是迭代器# 验证可迭代对象和迭代器的区别 my_list = [1, 2, 3] # list是可迭代对象,但不是迭代器 print(hasattr(my_list, '__iter__')) # True print(hasattr(my_list, '__next__')) # False # 通过iter()获取迭代器 list_iter = iter(my_list) print(hasattr(list_iter, '__next__')) # True # 迭代器只能遍历一次 print(list(list_iter)) # [1, 2, 3] print(list(list_iter)) # [] - 已耗尽二、生成器函数:yield的魔力2.1 生成器的基本概念