迭代器的作用----减少程序运行的内存开销

迭代器特点:

1、一个一个的取值,而不是一次性把所有数据创建出来,迭代器中的数据不取不创建
2、只能按照顺序取,不能跳过也不能回头
3、一个迭代器中的数据只能从头取到尾一次

 

生成器函数没有return,利用yield返回,换句话说,有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)
posted on 2019-12-17 15:05  第六人  阅读(455)  评论(0编辑  收藏  举报