您好,登錄后才能下訂單哦!
如何在Python中定義迭代器?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
Python是一種編程語言,內置了許多有效的工具,Python幾乎無所不能,該語言通俗易懂、容易入門、功能強大,在許多領域中都有廣泛的應用,例如最熱門的大數據分析,人工智能,Web開發等。
一、什么是迭代器
迭代,顧名思義就是重復做一些事很多次(就現在循環中做的那樣)。迭代器是實現了__next__()方法的對象(這個方法在調用時不需要任何參數),它是訪問可迭代序列的一種方式,通常其從序列的第一個元素開始訪問,直到所有的元素都被訪問才結束。 [注意]:迭代器只能前進不能后退
[迭代器的優點]:
使用迭代器不要求事先準備好整個迭代過程中的所有元素。迭代器僅僅在迭代到某個元素時才計算該元素,而在這之前或之后元素可以不存在或者被銷毀。因此迭代器適合遍歷一些數量巨大甚至無限的序列。
二、創建迭代器
A、使用內建的工廠函數iter(iterable)可以將可迭代序列轉換為迭代器
a=[1,2,3,4] b=(1,2,3) str='Tomwenxing' print(iter(a)) print(iter(b)) print(iter(str))
運行結果:
<listiterator object at 0x0000000001D6D550>
<tupleiterator object at 0x0000000001D6D550>
<iterator object at 0x0000000001D6D550>
B、自定義迭代器
?Python中迭代器的本質上每次調用__next__()
方法都返回下一個元素或拋出StopIteration的容器對象
?由于Python中沒有“迭代器”這個類,因此具有以下兩個特性的類都可以稱為“迭代器”類:
1、有__next__()
方法,返回容器的下一個元素或拋出StopIteration異常
2、有__iter__()
方法,返回迭代器本身
#斐波那契數列 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 #等價于: #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=' ')
運行結果:
<__main__.Fabs object at 0x00000000023F9278>
1 1 2 3 5 8 13 21 34 55
三、迭代器的方法
1.iter.__next__():返回迭代器的下一個元素,但沒有下一個元素時拋出StopIteration異常
list=[1,2,3,4] list=iter(list) print(list.__next__()) print(list.__next__()) print(list.__next__()) print(list.__next__()) print(list.__next__())
運行結果:
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__():返回迭代器對象本身
list=[1,2,3,4] list=iter(list) print(list.__iter__())
運行結果:
<list_iterator object at 0x0000000001D6F208>
關于如何在Python中定義迭代器問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。