在 Python 中,yield 用于生成一个迭代器(iterator),而不是一个普通的列表或集合。当你使用 yield 生成一个迭代器时,它会创建一个生成器对象,允许你按需逐个产生值而不一次性生成所有值。
这意味着一旦你从生成器中获取了值,生成器会"记住"它的状态,以便在下一次迭代中继续生成下一个值。这是一种非常高效的方式,特别是当你需要处理大量数据或无限数据流时。
当你对生成器进行迭代时,它会在每次迭代中执行 yield 语句,生成一个值并将状态保存在那里。如果你再次迭代同一个生成器,它会从上次停止的地方继续生成值,而不会重新开始。
这就是为什么你在使用 yield 生成的分组函数时,可能会遇到问题。如果你想重新遍历生成器,你需要重新创建一个新的生成器对象,或者在迭代之前重置生成器的状态。
def group_into_pairs(iterable):
"""
将输入 iterable 列表按照两个元素为一组进行分组,并使用 yield 逐个生成分组结果。
"""
group = [] # 用于存储当前分组的列表
for item in iterable:
group.append(item) # 将元素添加到当前分组
if len(group) == 2: # 如果当前分组中有两个元素
yield group # 生成当前分组
group = [] # 重置当前分组
if group: # 处理剩余的不足两个元素的情况
yield group
# 示例数据
data = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 使用分组函数
b=group_into_pairs(data)
for x in b:
pass
# print(x)
for y in b:#此时输出为空
print(y)