版權全部,未經許可,禁止轉載python
迭代器是一個包含有限數量值的對象。正則表達式
迭代器是一個能夠被迭代的對象,能夠遍歷迭代器中的全部值。函數
從技術上講,在Python中,迭代器是實現迭代器協議的對象,該協議由方法__iter__()
和__next__()
組成。code
列表、元組、字典和集合都是可迭代的對象,能夠從其中得到迭代器。對象
全部這些對象均可用iter()
方法獲取迭代器:繼承
示例開發
從元組中獲取一個迭代器,遍歷並打印每一個值:字符串
mytuple = ("自行車", "汽車", "高鐵") myit = iter(mytuple) print(next(myit)) print(next(myit)) print(next(myit))
字符串也是可迭代對象,能夠從中獲取迭代器:get
示例it
使用迭代器遍歷字符串:
mystr = "自行車" myit = iter(mystr) print(next(myit)) print(next(myit)) print(next(myit))
咱們也能夠使用for循環來遍歷一個迭代器:
示例
迭代元組的值:
mytuple = ("自行車", "汽車", "高鐵") for x in mytuple: print(x)
示例
迭代字符串的字符:
mystr = "自行車" for x in mystr: print(x)
for
循環內部實際上進行了迭代器的獲取,及next()
方法的調用。
一個對象要建立迭代器,變成可迭代的,必須實現方法:__iter__()
和__next__()
。
__iter__()
方法必須始終返回迭代器對象自己。
__next__()
方法必須返回序列中的下一項。
示例
建立一個返回數字的迭代器,從1開始,每一個序列項遞增1(返回一、二、三、四、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))
上面示例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)