欢迎来到程序员中文网!

首页 Linux Mysql C++ Python PHP JavaScript 资源下载 动态 开源推荐
我要投稿 投诉建议

Python 生成器与迭代器详解

时间:2026年08月12日 04:46:50 浏览:0

迭代器协议


实现 __iter__()__next__() 方法的对象。


class Counter:
def __init__(self, limit):
self.limit = limit
self.current = 0
def __iter__(self):
return self
def __next__(self):
if self.current < self.limit:
self.current += 1
return self.current
raise StopIteration

for i in Counter(3):
print(i) # 1,2,3

生成器(yield)


生成器是更简单的迭代器实现。


def fibonacci(n):
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a + b

for num in fibonacci(5):
print(num) # 0,1,1,2,3

生成器表达式


squares = (x**2 for x in range(10))  # 惰性求值
print(next(squares)) # 0

协程 (yield 接收值)


def averager():
total = 0
count = 0
avg = None
while True:
value = yield avg
if value is None:
break
total += value
count += 1
avg = total / count

coro = averager()
next(coro) # 启动
print(coro.send(10)) # 10
print(coro.send(20)) # 15

生成器节省内存,适合处理大数据流,也是 asyncio 的核心基础。