Python 的生成器(Generator)本质上是一种惰性求值的可迭代对象,它的核心原理可以用一句话概括:
生成器通过“暂停—恢复”执行机制,在每次需要值时才计算并返回,而不是一次性生成所有结果。
下面从几个层次详细说明。
生成器是 实现了迭代器协议的函数或表达式:
yield 的函数就是生成器函数def gen():
yield 1
yield 2
g = gen()
此时 gen() 没有执行任何代码,g 只是一个生成器对象。
普通函数
def f():
return 1
生成器函数
def gen():
yield 1
yield 2
next():
yieldyield 的值next():
def gen():
print("start")
yield 1
print("middle")
yield 2
print("end")
g = gen()
next(g) # start → 返回 1
next(g) # middle → 返回 2
next(g) # end → StopIteration
在 CPython 中:
yield 相当于:
生成器自动拥有:
__iter__()
__next__()
所以可以直接用于:
for x in gen():
print(x)
list(range(1000000))
(i for i in range(1000000))
✅ 生成器适用于:
g = (x * x for x in range(10))
等价于一个匿名生成器函数。
生成器不仅能“产出”,还能“接收”:
def gen():
x = yield 1
yield x
g = gen()
next(g) # 1
g.send(10) # x = 10 → 返回 10
send():恢复并传值throw():抛出异常close():关闭生成器Python 生成器的原理是:基于 yield 的“暂停—恢复”执行机制,利用迭代器协议实现惰性计算,从而节省内存、提高执行效率。
如果你愿意,我也可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。