版權所有,未經許可,禁止轉載
章節
- Python 介紹
- Python 開發環境搭建
- Python 語法
- Python 變量
- Python 數值類型
- Python 類型轉換
- Python 字符串(String)
- Python 運算符
- Python 列表(list)
- Python 元組(Tuple)
- Python 集合(Set)
- Python 字典(Dictionary)
- Python If … Else
- Python While 循環
- Python For 循環
- Python 函數
- Python Lambda
- Python 類與對象
- Python 繼承
- Python 迭代器(Iterator)
- Python 模塊
- Python 日期(Datetime)
- Python JSON
- Python 正則表達式(RegEx)
- Python PIP包管理器
- Python 異常處理(Try…Except)
- Python 打開文件(File Open)
- Python 讀文件
- Python 寫文件
- Python 刪除文件與文件夾
Python 迭代器(Iterator)
迭代器是一個包含有限數量值的對象。
迭代器是一個可以被迭代的對象,可以遍歷迭代器中的所有值。
從技術上講,在Python中,迭代器是實現迭代器協議的對象,該協議由方法__iter__()和__next__()組成。
可迭代的數據類型
列表、元組、字典和集合都是可迭代的對象,可以從其中獲得迭代器。
所有這些對象都可用iter()方法獲取迭代器:
示例
從元組中獲取一個迭代器,遍歷並打印每個值:
mytuple = ("自行車", "汽車", "高鐵")
myit = iter(mytuple)
print(next(myit))
print(next(myit))
print(next(myit))
字符串也是可迭代對象,可以從中獲取迭代器:
示例
使用迭代器遍歷字符串:
mystr = "自行車"
myit = iter(mystr)
print(next(myit))
print(next(myit))
print(next(myit))
for循環迭代
我們也可以使用for循環來遍歷一個迭代器:
示例
迭代元組的值:
mytuple = ("自行車", "汽車", "高鐵")
for x in mytuple:
print(x)
示例
迭代字符串的字符:
mystr = "自行車"
for x in mystr:
print(x)
for循環內部實際上進行了迭代器的獲取,及next()方法的調用。
創建迭代器
一個對象要創建迭代器,變成可迭代的,必須實現方法:__iter__()和__next__()。
__iter__()方法必須始終返回迭代器對象本身。
__next__()方法必須返回序列中的下一項。
示例
創建一個返回數字的迭代器,從1開始,每個序列項遞增1(返回1、2、3、4、5等):
class MyNumbers:
def __iter__(self):
self.a = 1
return self
def __next__(self):
x = self.a
self.a += 1
return x
myclass = MyNumbers()
myiter = iter(myclass)
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
StopIteration
上面示例next()調用將永遠繼續,我們可以使用StopIteration語句停止迭代。
在__next__()方法中,我們可以根據迭代次數添加終止條件來引發錯誤:
示例
迭代20次后停止:
class MyNumbers:
def __iter__(self):
self.a = 1
return self
def __next__(self):
if self.a <= 20:
x = self.a
self.a += 1
return x
else:
raise StopIteration
myclass = MyNumbers()
myiter = iter(myclass)
for x in myiter:
print(x)
