1.生成器的介绍
根据程序员制定的规则循环生成数据,当条件不成立时则生成数据结束。数据不是一次性全部生成出来,而是使用一个,再生成一个,可以节约大量的内存。
2.创建生成器的方式
(1)推导式列表
(2)yield关键字
3.生成器推导式
# 创建生成器
my_generator = (i * 2 for i in range(5))
print(my_generator)
# next 可以获取生成器的下一个值
# value = next(my_generator)
# print(value)
# 遍历生成器
for value in my_generator:
print(value)
运行结果
at 0x101367048>
0
2
4
6
8
说明:
4.yield关键字
只要在函数中看到了yield这个关键字那就是生成器
def my_generator(n):
for i in range(n):
print("开始生成...")
yield i
print("完成一次...")
if __name__ == '__main__':
g = my_generator(2)
for i in g :
print(i)
运行结果:
开始生成...
0
完成一次...
开始生成...
1
完成一次...
说明:
3.生成器的使用场景
数学中有个著名的斐波拉契数列(Fibonacci),数列中第一个数为0,第二个数为1,其后的每一个数都可由前两个数相加得到:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
现在我们使用生成器来实现这个斐波那契数列,每次取值都通过算法来生成下一个数据, 生成器每次调用只生成一个数据,可以节省大量的内存。
def fibo(n):
a = 0
b = 1
# 记录生成fibo数字的下标
index = 0
while index < n :
s = a
a, b = b , a + b
index += 1
#代码执行到yield会暂停,然后把结果返回出去,下次启动生成器会在暂停的位置继续往下执行
yield s
fibo = fibo(5)
# 遍历生成的数据
for i in fibo:
print(i)
说明: