def number_generator():
num = 0
while True:
if num >= 5:
return
yield num
num += 1
gen = number_generator()
for num in gen:
print(num)
return
和 yield
的工作原理及影响
yield
:
- 当函数执行到
yield
语句时,函数会暂停执行,并返回yield
后面的值。同时,函数的当前状态(包括局部变量的值、执行位置等)会被保存下来。
- 下次调用生成器的
__next__()
方法(在for
循环中隐式调用)时,函数会从暂停的位置继续执行,直到再次遇到yield
或者return
语句。
return
:
- 在生成器函数中,
return
语句用于提前结束生成器。当执行到return
语句时,生成器会抛出StopIteration
异常,标志着生成器迭代的结束。
- 与普通函数不同,生成器函数中的
return
语句不能返回值(如果在Python 3.3及以上版本,return
语句可以带一个返回值,这个返回值会成为StopIteration
异常的参数)。在上述代码中,当num >= 5
时,执行return
语句,生成器停止生成值,for
循环也会随之结束。