python生成器,可迭代對(duì)象,迭代器區(qū)別和聯(lián)系
生成器,可迭代對(duì)象,迭代器之間究竟是什么關(guān)系?
用一幅圖來(lái)概括:
1.生成器
定義生成器
方式一:
//區(qū)別于列表生成式 gen = [x*x for x in range(5)] gen = (x*x for x in range(5)) print(gen) //Out:<generator object <genexpr> at 0x00000258DC5CD8E0>
方式二:
def fib(): prev, curr = 0, 1 while True: yield curr prev, curr = curr, curr + prev f = fib() print(f) //Out:<generator object fib at 0x00000258DC5CD150>
定義成功后,我們可以利用next()訪問(wèn)生成器下一個(gè)元素
print(next(gen)) //0 print(next(gen)) //1 ... print(next(gen)) //16 print(next(gen)) //StopIteration
但一般用for循環(huán)遍歷
for n in gen: print(n) //0 1 4 9 16
2.迭代器
任何實(shí)現(xiàn)了__iter__和__next__()方法的對(duì)象都是迭代器。__iter__返回迭代器自身,__next__返回容器中的下一個(gè)值。所以生成器是特殊的迭代器,她內(nèi)部具有這兩種方法。
一個(gè)自定義的迭代器如下:
class Fib: def __init__(self): self.prev = 0 self.curr = 1 def __iter__(self): return self def __next__(self): value = self.curr self.curr += self.prev self.prev = value return value f = Fib() count = 1 for n in f: print(n) count = count+1 if count>=10: break //Out:1 1 2 3 5 8 13 21 34
3.可迭代對(duì)象
像list,tuple,set,dict,str等可以直接作用于for循環(huán)的對(duì)象,稱為可迭代對(duì)象??傻鷮?duì)象實(shí)現(xiàn)了__iter__方法,用于返回迭代器。
demo = [1,2,3,4] print(isinstance(demo, Iterable)) //True iter_object = iter(demo) print(iter_object) //<list_iterator object at 0x00000258DC5EF748>
相關(guān)文章
Python?turtle.right與turtle.setheading的區(qū)別講述
這篇文章主要介紹了Python?turtle.right與turtle.setheading的區(qū)別,本文以turtle.right為例給大家詳細(xì)介紹,需要的朋友可以參考下2022-03-03Python實(shí)現(xiàn)在一行中交換兩個(gè)變量
這篇文章主要為大家詳細(xì)介紹了如何利用Python語(yǔ)言實(shí)現(xiàn)在一行中交換兩個(gè)變量功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-08-08Python Pandas數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)單介紹
這篇文章主要介紹了Python Pandas數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)單介紹的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07python gui開(kāi)發(fā)——制作抖音無(wú)水印視頻下載工具(附源碼)
這篇文章主要介紹了python gui開(kāi)發(fā)——制作抖音無(wú)水印視頻下載工具(附源碼)的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-02-02openCV中值濾波和均值濾波的代碼實(shí)現(xiàn)
在我們生活中的有很多時(shí)候都可以用到濾波,例如美顏的磨皮功能,本文就詳細(xì)的介紹了openCV中值濾波和均值濾波的代碼實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03python實(shí)現(xiàn)語(yǔ)音常用度量方法的代碼詳解
由于語(yǔ)音信號(hào)是一種緩慢變化的短時(shí)平穩(wěn)信號(hào),因而在不同時(shí)間段上的信噪比也應(yīng)不一樣。為了改善上面的問(wèn)題,可以采用分段信噪比。接下來(lái)通過(guò)本文給大家介紹python實(shí)現(xiàn)語(yǔ)音常用度量方法,感興趣的朋友跟隨小編一起看看吧2021-05-05Python編程實(shí)現(xiàn)使用線性回歸預(yù)測(cè)數(shù)據(jù)
這篇文章主要介紹了Python編程實(shí)現(xiàn)使用線性回歸預(yù)測(cè)數(shù)據(jù),具有一定借鑒價(jià)值,需要的朋友可以了解下。2017-12-12淺談利用numpy對(duì)矩陣進(jìn)行歸一化處理的方法
今天小編就為大家分享一篇淺談利用numpy對(duì)矩陣進(jìn)行歸一化處理的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07python xmind 包使用詳解(其中解決導(dǎo)出的xmind文件 xmind8可以打開(kāi) xmind2020及之后版本打
xmind8 可以打開(kāi)xmind2020 報(bào)錯(cuò),如何解決這個(gè)問(wèn)題呢?下面小編給大家?guī)?lái)了python xmind 包使用(其中解決導(dǎo)出的xmind文件 xmind8可以打開(kāi) xmind2020及之后版本打開(kāi)報(bào)錯(cuò)問(wèn)題),感興趣的朋友一起看看吧2021-10-10