python的迭代器在for內部通過迴圈實現。python的迭代器物件必須實現__iter__()
和__next__()
方法。 如果我們可以通過迭代器獲取乙個物件,那麼這個物件稱為「可迭代的」。很多內建的容器,比如list
、tuple
、string
等,都是可迭代的。
我們可以使用next()
函式對乙個迭代器中所有的元素進行迭代,當我們到達容器尾部或者沒有元素可以迭代時,系統丟擲stopiteration
。
# 定義list
mylist=[1,2,3,4]
# 通過iter獲取乙個迭代器
my_iter=iter(mylist)
# 通過next()方法獲取元素
print(next(my_iter))
print(next(my_iter))
# 通過內建的__next__()方法迭代
print(my_iter.__next__())
print(my_iter.__next__())
# 如果不注釋,丟擲異常,沒有元素可以迭代了
# next(my_iter)
或者通過for
迴圈實現:
my_list=[1,2,3,4,5]
for elem in my_list:
print(elem)
iter_obj=iter(iterable)
while
true:
try:
# 獲取下乙個元素
element=next(iter_obj)
# 對元素採取一些操作
except stopiteraiton:、
# 丟擲stopiteration異常,並終止迴圈
break
通過無限迴圈,並通過呼叫next()
獲取元素
我們只需要實現__iter__()
和__next__()
方法即可。前者返回迭代器物件本身,如果需要的話,可以執行初始化操作;或者必須返回序列中的下乙個元素,如果到達容器尾部,必須丟擲stopiteration
異常!
1
class
powtwo:
2"""定義迭代物件"""
3def
__init__
(self,maxn=0):
4 self._max=maxn
56def__iter__
(self):
7 self._n=0
8return self
910def__next__
(self):
11if self._n<=self._max:
12 result=2**self._n
13 self._n+=1
14return result
15else:
16raise stopiteration
1718 my_list=powtwo(4)
19 i=iter(my_list)
2021
# 通過next()方法迭代
22 print(next(i))
2324
# 通過for迴圈進行迭代,elem是__next__()返回的result
25for elem in my_list:
26 print(elem)
最後宣告一點,自己定義迭代器時,要新增終止條件,否則會出現無限迭代的情況!!! python的迭代器 Python 迭代器
迭代器 迭代是訪問集合元素的一種方式。迭代器是乙個可以記住遍歷的位置的物件。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。可迭代物件 以直接作用於 for 迴圈的資料型別有以下幾種 一類是集合資料型別,如 list tuple dict set str 等...
python的迭代器 python 迭代器
在介紹迭代器之前,先說明下迭代的概念 迭代 通過for迴圈遍歷物件的每乙個元素的過程。python的for語法功能非常強大,可以遍歷任何可迭代的物件。在python中,list tuple string dict set bytes都是可以迭代的資料型別。可以通過collections模組的iter...
python的迭代器 Python 迭代器
概述迭代器是訪問集合元素的一種方式。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。延遲計算或惰性求值 lazy evaluation 迭代器不要求你事先準備好整個迭代過程中所有的元素。僅僅是在迭代至某個元素時才計算該元素,而在這之前或之後,元素可以不存在或...