生成器的作用----减少程序运行的内存开销

生成器特点:

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)
12-15 00:28
查看更多