在Python生成器中使用yield
语句可以将生成器函数转变为一个迭代器,每次调用生成器的__next__()
方法时,代码会执行到yield
语句处,并将yield
后面的值返回给调用者。当再次调用__next__()
方法时,代码会从上次暂停的位置继续执行,直到遇到下一个yield
语句。
当在生成器中使用break
语句时,break
会中断生成器的执行并跳出循环,此时生成器会抛出StopIteration
异常来标志生成器的结束。
下面是一个示例代码,演示了在生成器中使用break
语句:
def generator_func():
yield 1
yield 2
break
yield 3
generator = generator_func()
try:
while True:
print(next(generator))
except StopIteration:
print("Generator stopped.")
输出结果为:
1
2
Generator stopped.
在这个示例中,生成器函数generator_func()
使用yield
语句返回了三个值:1、2和3。然而,在yield 2
后使用了break
语句,导致生成器的执行被中断并跳出循环。当我们使用next(generator)
来遍历生成器时,第一次调用会返回1,第二次调用会返回2,但是在第三次调用时,由于生成器已经被中断,抛出了StopIteration
异常。
需要注意的是,使用break
语句中断生成器的执行是一个非常规的用法,一般情况下我们会在生成器函数的末尾使用return
语句来结束生成器的执行。而在使用生成器时,我们通常会使用for
循环或者yield from
语句来遍历生成器,而不是使用next()
函数。
云+社区技术沙龙[第14期]
云+社区技术沙龙[第11期]
Elastic 中国开发者大会
云+社区技术沙龙 [第31期]
腾讯技术开放日
DBTalk
领取专属 10元无门槛券
手把手带您无忧上云