Python中生成器generator和迭代器Iterator的使用方法
一、生成器
1. 生成器的定義
- 把所需要值得計(jì)算方法儲(chǔ)存起來,不會(huì)先直接生成數(shù)值,而是等到什么時(shí)候使用什么時(shí)候生成,每次生成一個(gè),減少計(jì)算機(jī)占用內(nèi)存空間
2. 生成器的創(chuàng)建方式
- 第一種只要把一個(gè)列表生成式的 [ ] 改成 ( )
- 第二種方法使用yield創(chuàng)建生成器
- 只要在一個(gè)函數(shù)中存在至少一個(gè)yield關(guān)鍵字,該函數(shù)就不是普通函數(shù),是一個(gè)生成器
- 返回一個(gè)對(duì)象,需要使用變量接收
- 生成器可以用for進(jìn)行遍歷得到所有的值
- 打印結(jié)果
3. 啟動(dòng)生成器的方法
- 第一種:
- 第二種:
二、迭代器
可迭代數(shù)據(jù)類型(具有可迭代功能)
- 把可以通過for...in...這類語句迭代讀取一條數(shù)據(jù)供我們使用的對(duì)象稱之為可迭代對(duì)象(Iterable)
例如:列表,元組,字典,集合等數(shù)據(jù)類型,但他們不是可迭代對(duì)象 - generator(生成器)
- yield
- 列表生成器
- 生成器都是可迭代對(duì)象
如何判斷一個(gè)對(duì)象是不是有可迭代功能
from collections import Iterator # 列表是可迭代的 result = isinstance([1,2], Iterable) print(result) # isinstance函數(shù)會(huì)返回一個(gè)bool值 True為可迭代,反之False將具有迭代功能的數(shù)據(jù)類型轉(zhuǎn)化為可迭代器
- 可以被next()調(diào)用并不斷返回下一個(gè)值的對(duì)象稱之為迭代器Iterator
迭代器的判斷方式
from collections import Iterator # 列表是可迭代對(duì)象 # isinstance函數(shù)會(huì)返回一個(gè)bool值 True為迭代器,反之False result = isinstance([1,2], Iterator) print(result)可迭代對(duì)象的本質(zhì)
-
我們分析對(duì)可迭代對(duì)象進(jìn)行迭代使用的過程,發(fā)現(xiàn)每迭代一次(即在for...in...中每循環(huán)一次)都會(huì)返回對(duì)象中的下一條數(shù)據(jù),一直向后讀取數(shù)據(jù)直到迭代了所有數(shù)據(jù)后結(jié)束。那么,在這個(gè)過程中就應(yīng)該有一個(gè)“人”去記錄每次訪問到了第幾條數(shù)據(jù),以便每次迭代都可以返回下一條數(shù)據(jù)。我們把這個(gè)能幫助我們進(jìn)行數(shù)據(jù)迭代的“人”稱為迭代器(Iterator)。
-
可迭代對(duì)象的本質(zhì)就是可以向我們提供一個(gè)這樣的中間“人”即迭代器幫助我們對(duì)其進(jìn)行迭代遍歷使用。
-
可迭代對(duì)象通過__iter__方法向我們提供一個(gè)迭代器,我們?cè)诘粋€(gè)可迭代對(duì)象的時(shí)候,實(shí)際上就是先獲取該對(duì)象提供的一個(gè)迭代器,然后通過這個(gè)迭代器來依次獲取對(duì)象中的每一個(gè)數(shù)據(jù).
-
那么也就是說,一個(gè)具備了__iter__方法的對(duì)象,就是一個(gè)可迭代對(duì)象。
- 舉例說明迭代器本質(zhì)原理
比如,數(shù)學(xué)中有個(gè)著名的斐波拉契數(shù)列(Fibonacci),數(shù)列中第一個(gè)數(shù)為0,第二個(gè)數(shù)為1,其后的每一個(gè)數(shù)都可由前兩個(gè)數(shù)相加得到: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
現(xiàn)在我們想要通過for...in...循環(huán)來遍歷迭代斐波那契數(shù)列中的前n個(gè)數(shù)。那么這個(gè)斐波那契數(shù)列我們就可以用迭代器來實(shí)現(xiàn),每次迭代都通過數(shù)學(xué)計(jì)算來生成下一個(gè)數(shù)。
?
轉(zhuǎn)載于:https://www.cnblogs.com/yanguhung/p/10145767.html
總結(jié)
以上是生活随笔為你收集整理的Python中生成器generator和迭代器Iterator的使用方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python3.6全栈开发实例[005]
- 下一篇: Mac python Tesseract