Python--day4

1.迭代器原理及使用

  迭代器&生成器

迭代器

迭代器是访问集合元素的一种方式.且带起对象从集合的第一个元素开始访问,知道所有的元素被访访问玩结束,迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退,另外迭代器的一大优点是不要求事先准备好整个迭代过程,中所有的元素,迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元祖可以不存在或者被销毁,这个特点使得他特别适合用于便利一些巨大的或是无限的集合,比如几个G的文件.

  特点:

  1.访问者不需要关心迭代器内部的结构,仅需要通过next()方法不断取下一个内容.

  2.不能随机访问集合中的某个值,只能从头到尾依次访问

  3.访问到一半时不能方回退

  4.便于循环比较大的数据集合,节省内存.

迭代器不能通过下标的方式来取值的,

 1 __author__ = 'Administrator'
 2 a = iter(['aa','bb','cc'])
 3 print(a[1])
 4 ------------------------------------------------------------------------------------
 5 输出:
 6 Traceback (most recent call last):
 7   File "E:/python/day1/day4/迭代器.py", line 3, in <module>
 8     print(a[1])
 9 TypeError: 'list_iterator' object is not subscriptable
10 可见迭代器不能用这方方法来取,
11 
12 ------------------------------------------------------------------------------------
13 __author__ = 'Administrator'
14 a = iter(['aa','bb','cc'])
15 print(a.__next__())
16 print(a.__next__())
17 print(a.__next__())
18 ------------------------------------------------------------------------------------
19 输出:
20 aa
21 bb
22 cc
迭代器取值方法

生成器generator

定义: 一个函数调用时返回一个迭代器,那这个函数就叫做生成器(generator),如果函数中包含yield语法,那这个函数就会变成生成器

 1 __author__ = 'Administrator'
 2 def cash_money(amount):
 3     while amount > 0:
 4         amount -=100
 5         yield 100
 6         print("aaasdfasdfsadfaaaa")
 7    # print(" mei qian le!!!")
 8 
 9 atm = cash_money(500)
10 print(type(atm))
11 print(atm.__next__())
12 print(atm.__next__())
13 print(atm.__next__())
14 print(atm.__next__())
15 print(atm.__next__())
16 print(atm.__next__())
17 --------------------------------------------------------------------------------
18 #生面定义了一个函数,函数调用的时候返回的是迭代器(generator),然后函数中包含了 yield 语法 所以就变成了生成器
19 #生成器在调用的时候就用到了next()
20 
21 #输出:
22 #输出的是函数返回的 类型
23 <class 'generator'>
24 #提示第一次取钱
25 100
26 #当第二次取钱的时候就会执行print 中的内容,由此可以说明,当第一次执行完之后,程序并没有结束,
27 aaasdfasdfsadfaaaa
28 100
29 aaasdfasdfsadfaaaa
30 100
31 aaasdfasdfsadfaaaa
32 100
33 aaasdfasdfsadfaaaa
34 100
35 aaasdfasdfsadfaaaa
36 #当打印到第五次的时候表示已经没有值了 所以会有了以下的提示
37 Traceback (most recent call last):
38   File "E:/python/day1/day4/迭代器.py", line 16, in <module>
39     print(atm.__next__())
40 StopIteration
生成器小案例
原文地址:https://www.cnblogs.com/nb-blog/p/5163329.html