











def count_up_to(n):
i = 1
while i <= n:
yield i # 暂停在这里,返回当前值
i += 1
# 调用
for num in count_up_to(3):
print(num) # 输出:1, 2, 3
不像 return 立即返回所有结果
yield 按需产生值,节省内存
# 使用列表 - 一次性占用全部内存
data = [i * 2 for i in range(1000000)]
# 使用生成器 - 逐个产生值
def data():
for i in range(1000000):
yield i * 2
# 内存友好!
async def story_generator():
async for chunk in generate_story_stream(query):
yield chunk # 每收到一段数据就发送给前端
return StreamingResponse(
story_generator(),
media_type="text/event-stream"
)
这里 yield 让后端能够:
| 特性 | return | yield |
|---|---|---|
| 返回值 | 一次返回,函数结束 | 多次返回,函数暂停 |
| 状态保留 | 不保留 | 保留局部变量状态 |
| 使用场景 | 普通函数 | 生成器/协程 |
def fibonacci(n):
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a + b
# 生成前 10 个斐波那契数
list(fibonacci(10)) # [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。