最近看一些python的代码,经常会出现yield,该关键字可以创建生成器,它的核心作用是让函数能够暂停执行并且返回一个值,然后在下次调用的时候从暂停的地方继续执行。也就是说函数执行到yield的地方,会暂时挂起,等待下次唤醒后继续执行。我们看个栗子
# 普通函数,一次性返回所有结果
def normal_function():
result = []
for i in range(5):
result.append(i)
return result
print(normal_function()) # [0,1,2,3,4]一次性全部输出
# 生成函数 - 使用yield,逐个产生结果
def generator_function():
for i in range(5):
yield i
gen = generator_function()
print(gen) # 输出 <generator object generator_function at 0x100303a50>,暂时挂起
print(next(gen)) # 再次触发,0
print(next(gen)) # 再次触发,1
print(list(gen)) # 再次触发【2, 3, 4]