Python迭代器定義與簡(jiǎn)單用法分析
本文實(shí)例講述了Python迭代器定義與簡(jiǎn)單用法。分享給大家供大家參考,具體如下:
一、什么是迭代器
迭代,顧名思義就是重復(fù)做一些事很多次(就現(xiàn)在循環(huán)中做的那樣)。迭代器是實(shí)現(xiàn)了__next__()方法的對(duì)象(這個(gè)方法在調(diào)用時(shí)不需要任何參數(shù)),它是訪問(wèn)可迭代序列的一種方式,通常其從序列的第一個(gè)元素開始訪問(wèn),直到所有的元素都被訪問(wèn)才結(jié)束。 [注意]:迭代器只能前進(jìn)不能后退
[迭代器的優(yōu)點(diǎn)]:
使用迭代器不要求事先準(zhǔn)備好整個(gè)迭代過(guò)程中的所有元素。迭代器僅僅在迭代到某個(gè)元素時(shí)才計(jì)算該元素,而在這之前或之后元素可以不存在或者被銷毀。因此迭代器適合遍歷一些數(shù)量巨大甚至無(wú)限的序列。
二、創(chuàng)建迭代器
A、使用內(nèi)建的工廠函數(shù)iter(iterable)可以將可迭代序列轉(zhuǎn)換為迭代器
a=[1,2,3,4] b=(1,2,3) str='Tomwenxing' print(iter(a)) print(iter(b)) print(iter(str))
運(yùn)行結(jié)果:
<listiterator object at 0x0000000001D6D550>
<tupleiterator object at 0x0000000001D6D550>
<iterator object at 0x0000000001D6D550>
B、自定義迭代器
•Python中迭代器的本質(zhì)上每次調(diào)用__next__()方法都返回下一個(gè)元素或拋出StopIteration的容器對(duì)象
•由于Python中沒(méi)有“迭代器”這個(gè)類,因此具有以下兩個(gè)特性的類都可以稱為“迭代器”類:
1、有__next__()方法,返回容器的下一個(gè)元素或拋出StopIteration異常
2、有__iter__()方法,返回迭代器本身
#斐波那契數(shù)列
class Fabs():
def __init__(self,max):
self.max=max
self.n,self.a,self.b=0,0,1
def __iter__(self):#定義__iter__方法
return self
def __next__(self):#定義__next__方法
if self.n<self.max:
tmp=self.b
self.a,self.b=self.b,self.a+self.b
#等價(jià)于:
#t=(self.a,self.a+self.b)
#self.a=t[0]
#self.b=t[1]
self.n+=1
return tmp
raise StopIteration
print(Fabs(5))
for item in Fabs(10):
print(item,end=' ')
運(yùn)行結(jié)果:
<__main__.Fabs object at 0x00000000023F9278>
1 1 2 3 5 8 13 21 34 55
三、迭代器的方法
1.iter.__next__():返回迭代器的下一個(gè)元素,但沒(méi)有下一個(gè)元素時(shí)拋出StopIteration異常
list=[1,2,3,4] list=iter(list) print(list.__next__()) print(list.__next__()) print(list.__next__()) print(list.__next__()) print(list.__next__())
運(yùn)行結(jié)果:
Traceback (most recent call last):
File "E:\py3Demo\Hello\iterDemo.py", line 7, in <module>
print(list.__next__())
StopIteration
1
2
3
4
2.iter.__iter__():返回迭代器對(duì)象本身
list=[1,2,3,4] list=iter(list) print(list.__iter__())
運(yùn)行結(jié)果:
<list_iterator object at 0x0000000001D6F208>
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python加密解密算法與技巧總結(jié)》、《Python編碼操作技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進(jìn)階經(jīng)典教程》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
Python實(shí)現(xiàn)圖像去噪方式(中值去噪和均值去噪)
今天小編就為大家分享一篇Python實(shí)現(xiàn)圖像去噪方式(中值去噪和均值去噪),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12
Python基于TCP實(shí)現(xiàn)會(huì)聊天的小機(jī)器人功能示例
這篇文章主要介紹了Python基于TCP實(shí)現(xiàn)會(huì)聊天的小機(jī)器人功能,結(jié)合實(shí)例形式分析了Python通過(guò)socket模塊實(shí)現(xiàn)TCP連接的客戶端與服務(wù)器端模擬聊天機(jī)器人功能相關(guān)操作技巧,需要的朋友可以參考下2018-04-04
gethostbyaddr在Python3中引發(fā)UnicodeDecodeError
本文介紹了gethostbyaddr()在Python?3中引發(fā)UnicodeDecodeError的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-05-05
Python?xmltodict實(shí)現(xiàn)簡(jiǎn)化XML數(shù)據(jù)處理
Python社區(qū)為提供了xmltodict庫(kù),它專為簡(jiǎn)化XML與Python數(shù)據(jù)結(jié)構(gòu)的轉(zhuǎn)換而設(shè)計(jì),本文主要來(lái)為大家介紹一下如何使用xmltodict實(shí)現(xiàn)簡(jiǎn)化XML數(shù)據(jù)處理,希望對(duì)大家有所幫助2025-01-01
python調(diào)用新浪微博API項(xiàng)目實(shí)踐
因?yàn)樽罱佑|到調(diào)用新浪微博開放接口的項(xiàng)目,所以就想試試用python調(diào)用微博API,需要的朋友可以參考下2014-07-07
pytorch 把圖片數(shù)據(jù)轉(zhuǎn)化成tensor的操作
這篇文章主要介紹了pytorch 把圖片數(shù)據(jù)轉(zhuǎn)化成tensor的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03

