# Python 使用生成器对延迟操作提供了支持。所谓延迟操作,是指在需要的时候才产生结果,而不是立即产生结果。这也是生成器的主要好处。
#
# Python有两种不同的方式提供生成器:
#
# 生成器函数:
#
# 常规函数定义,但是,使用 yield 语句而不是 return 语句返回结果
# yield 语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次重它离开的地方继续执行
# 生成器表达式:
#
# 类似于列表推导,但是,生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表
# 列表推导式
import random
list01 = [random.randint(1, 5) for i in range(5)]
print(list01) # [1, 3, 4, 1, 2]
# 生成器表达式
gen01 = (random.randint(1, 5) for i in range(5))
print(gen01) # <generator object <genexpr> at 0x7f18cc1c8830>
# 生成器当中的元素只能获取一遍
# for 生成器.__next__()
print("data:", gen01.__next__()) # 第一个数据
print("data:", gen01.__next__()) # 第二个数据
for item in gen01:
print("for:", item)
# print("data:", gen01.__next__()) # 报错:StopIteration