python迭代器和生成器_Python之迭代器和生成器
一、迭代器
1、迭代器的概念
迭代器即迭代的工具,那么什么是迭代呢?迭代是一個重復(fù)的過程,每一次重復(fù)即一次迭代,并且每次迭代的結(jié)果都是下一次迭代的初始值。下面的代碼就不是迭代.
whileTrue:print('====>')
上面代碼只是單純的重復(fù),不是迭代。下面的代碼就是迭代
1 l=[1,2,3]2 count=03 while count
二、為什么要有迭代器?什么是可迭代對象?什么是迭代器對象?
1、為什么要有迭代器
對于序列類型:字符串、列表、元組,我們可以使用索引的方式迭代取出其包含的元素。但對于字典、集合、文件等類型是沒有索引的,若還想取出其內(nèi)部包含的元素,則必須找出一種不依賴于索引的
迭代方式,這就是為什么要需要迭代器。
2、什么是可迭代對象
可迭代對象指的是內(nèi)置有_iter_方法的對象,即obj._iter_.如下
1 'hello'._iter_2 (1,2,3)._iter_3 [1,2,3]._iter_4 {'a':1}._iter_5 {'a','b'}._iter_6 open('a.txt')._iter_
3、什么是迭代器對象
可迭代對象執(zhí)行obj._iter_()得到的結(jié)果就是迭代器對象,而迭代器對象指的是內(nèi)置有_iter_又內(nèi)置有_next_方法的對象,文件類型是迭代器對象
1 open('a.txt')._iter_2 open('a.txt')._next_
注意:
迭代器對象一定是可迭代對象,而可迭代對象不一定是迭代器對象。
1、迭代器協(xié)議:對象必須提供一個next()方法,執(zhí)行該方法后要么返回迭代器中 的下一項,要么就引起一個StopIterator異常,以終止迭代(只能往后走不能往前退)
2、可迭代對象:實現(xiàn)了迭代器協(xié)議的對象
3、協(xié)議是一種約定,可迭代對象實現(xiàn)了迭代器協(xié)議,python的內(nèi)部工具(如for循環(huán),sum(),min(),max()函數(shù)等)使用迭代器協(xié)議訪問對象。
三、迭代器對象的使用
1 dic={'a':1,'b':2,'c':3}2 #得到迭代器對象,迭代器對象既有_iter_又有_next_,但是,迭代器_iter_()得到的仍然是迭代器本身
3 iter_dic=dic.__iter__()4 iter_dic.__iter__() isiter_dic5 #True
6 print(iter_dic.__next__())#等同于next(iter_dic)
7 print(iter_dic.__next__())#等同于next(iter_dic)
8 print(iter_dic.__next__())#等同于next(iter_dic)
9 #print(iter_dic.__next__())#等同于next(iter_dic)#拋出異常StopIteration異常
10
11 #有了迭代器我們就可以不依賴索引取值了
12 iter_dic=dic.__iter__()13 while 1:14 try
15 k=next(iter_dic)16 print(dic(k))17 exceptStopIteration18 break
19 #這樣書寫太丑陋了,需要我們自己捕獲異常,控制next,引出for循環(huán)
四、for循環(huán)
1 #基于for循環(huán),我們完全可以不再依賴索引去取值了
2 dic={'a':1,'b':2,'c':3}3 for k indic:4 print(dic[k])5 #for循環(huán)的工作原理
6 """
7 1、執(zhí)行in對象的dic._iter_()方法,得到迭代器對象iter_dic8 2、執(zhí)行next(iter_dic)將得到的值賦值給k,然后執(zhí)行循環(huán)代碼9 3、重復(fù)2過程,直到捕捉到異常StopIteration,循環(huán)結(jié)束10 """
五、迭代器的優(yōu)缺點
優(yōu)點:
1、提供一種統(tǒng)一的,不依賴于索引的迭代方式
2、惰性計算、節(jié)省內(nèi)存
缺點:
1、無法獲取長度(只有在next完畢才知道到底有幾個值)
2、一次性的不能往前走,只能往后退
六、生成器
1 #只要函數(shù)內(nèi)部包含有yield關(guān)鍵字,那么函數(shù)名()得到的結(jié)果就是生成器,并且不會執(zhí)行函數(shù)內(nèi)部的代碼,生成器就是迭代器
2 deffun():3 print("==========>first")4 yield 1
5 print("==========>second")6 yield 2
7 print("==========>third")8 yield 3
9 print("==========>end")10 g=fun()11 print(g)
總結(jié)
以上是生活随笔為你收集整理的python迭代器和生成器_Python之迭代器和生成器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 前端js自动填写 点击_爬虫自动填写学生
- 下一篇: 解析烧录固件失败_化虚为实,示人本相!F
