Python当中的yield的作用详解

在Python中,yield 是用于创建生成器(generator)的关键字,用于构建迭代器(iterator)。yield 类似于 return,但有着不同的行为和作用。

生成器函数:当函数包含 yield 语句时,它就不再是普通的函数,而是一个生成器函数。生成器函数可以通过yield关键字暂停执行并保存当前状态,使得函数能够返回一个值,并在下次调用时从上次暂停的地方继续执行。

迭代器:生成器函数返回的对象是一个迭代器,可以逐个产生值。每次调用生成器的 next() 方法或者使用 for 循环来迭代时,生成器函数将从上次暂停的位置继续执行,直到遇到下一个 yield 语句或函数结束为止。

示例代码:

1. 简单的生成器函数

python 复制代码
def simple_generator():
    yield 1
    yield 2
    yield 3

gen = simple_generator()  # 创建一个生成器对象

print(next(gen))  # 输出:1
print(next(gen))  # 输出:2
print(next(gen))  # 输出:3
# print(next(gen))  # 如果继续执行会触发 StopIteration 异常,因为没有更多的值可以产生了

2. 生成器函数处理数据

python 复制代码
def square_numbers(nums):
    for num in nums:
        yield num * num

# 使用生成器处理数据
my_nums = [1, 2, 3, 4, 5]
squared = square_numbers(my_nums)

for num in squared:
    print(num)  # 输出:1 4 9 16 25

在这个示例中,square_numbers 函数是一个生成器函数,通过遍历传入的列表 nums,逐个计算每个数的平方并使用 yield 语句生成这些平方值。然后,使用 for 循环遍历生成器产生的值并打印每个平方数。

3. 使用 yield 实现无限序列

python 复制代码
def infinite_sequence():
    num = 0
    while True:
        yield num
        num += 1

# 创建一个无限序列的生成器对象
gen = infinite_sequence()

print(next(gen))  # 输出:0
print(next(gen))  # 输出:1
print(next(gen))  # 输出:2
# ... 持续产生递增的整数

在这个例子中,infinite_sequence 函数是一个生成器函数,它使用一个 while True 循环,不断产生递增的整数序列,并使用 yield 将每个整数返回给调用者。通过调用 next() 方法,可以不断获取这个无限序列中的下一个值。

总之,yield 关键字使得函数能够暂停执行并向调用者产生值,从而创建了生成器。通过迭代生成器,可以逐个获取值,这在处理大量数据或需要按需生成数据时非常有用。

相关推荐
eBest数字化转型方案8 分钟前
Route Optimization for FMCG:多目标排线算法的工程实现
大数据·人工智能·算法
鹿鹿学长16 分钟前
微软把语音转写打到 0.1 美元/小时:5 个月降价 72%,AI 音频进入地板价时代
python·自动化
weixin_4407305017 分钟前
使用pytest中方法控制执行步骤(test_begin.py、test_end.py,@pytest.mark.run(order=1))
开发语言·python·pytest
小柯南敲键盘28 分钟前
跨境电商批量图片翻译与视频字幕翻译,就用跨马AI工具
大数据·人工智能·python·音视频
洋不写bug1 小时前
链表补充练习,双链表的模拟实现
java·数据结构·链表·双链表·底层实现
residual_fan1 小时前
持续对比强化学习(Continual Contrastive Reinforcement Learning)论文分享
人工智能·算法·数据挖掘·数据分析
心易行者1 小时前
Python自动化测试7步落地法:用python在线运行省掉90%环境配置时间
java·开发语言·人工智能·python·log4j·ai编程
s_w.h1 小时前
【 计网 】序列化与反序列化
linux·服务器·网络·算法·bash
Boop_wu1 小时前
[LangGraph] 案例 2 : 支持搜索的智能代理系统
服务器·windows·python·langchain
信奥卷王1 小时前
2025年09月GESPC++五级真题解析(含视频)
算法