生成器的作用----减少程序运行的内存开销
生成器特点:
1、一个一个的取值,而不是一次性把所有数据创建出来,迭代器中的数据不取不创建
2、只能按照顺序取,不能跳过也不能回头
3、一个迭代器中的数据只能从头取到尾一次
生成器函数没有return,利用yield返回
一个简单的生成器
1 # 这是一个简单的生成器 2 def SimpleTest(): 3 print("this is first") 4 yield 1 5 print("test is second") 6 yield 2
我们可以利用生成器自带函数__next__()来一个一个取值
1 ret = SimpleTest() 2 print(ret.__next__())
思考:下面的代码结果是什么
1 def SimpleTest(): 2 print("this is first") 3 yield 1 4 print("test is second") 5 yield 2 6 7 gen = SimpleTest() 8 9 print(list(gen)) 10 print('='*20) 11 for i in gen: 12 print(i)
利用=分开输出结果
结合生成器的特点,我们可以大致推断出是怎么样的一种结果
结果:
同一个生成器一次只能取一回,所以上述for循环打印时,生成器中已经没有值可取。
思考:下面的代码输出结果应该为多少?
1 def func(): 2 for i in range(5): 3 yield i 4 5 g1 = g2 =func() 6 for i in g1: 7 print(i) 8 for i in g2: 9 print(i) 10 11 print('='*40) 12 13 g3 = func() 14 g4 = func() 15 for i in g3: 16 print(i) 17 for i in g4: 18 print(i)