迭代器便可以遍歷諸如列表,字典及字符串等序列對象甚至自定義對象的對象,其本質就是記錄迭代對象中每一個元素的位置。迭代過程從第一個元素至最後一個元素,且過程不能回滾或反方向迭代。python
序列對象能夠利用iter()
直接建立迭代器,並經過next()
便可迭代迭代器。bash
S = 'PYTHON'
IT = iter(S)
for it in IT:
print(it)
複製代碼
示例結果:ui
P
Y
T
H
O
N
複製代碼
S = 'PYTHON'
IT = iter(S)
print(next(IT))
print(next(IT))
print(next(IT))
print(next(IT))
print(next(IT))
print(next(IT))
複製代碼
示例結果:spa
P
Y
T
H
O
N
複製代碼
當咱們使用next()迭代時,若是迭代了次數超過了迭代器中的元素個數就會引起StopIteration
,由此咱們能夠利用while
循環迭代,並不斷捕捉迭代結束的異常完成for循環的迭代過程。code
S = 'PYTHON'
IT = iter(S)
while True:
try:
print(next(IT))
except StopIteration:
break
複製代碼
P
Y
T
H
O
N
複製代碼
把一個類做爲一個迭代器使用須要在類中實現兩個方法 iter() 與 next() 。iter() 方法返回一個特殊的迭代器對象, 這個迭代器對象實現了 next() 方法並經過 StopIteration 異常標識迭代的完成。next() 方法(Python 2 裏是 next())會返回下一個迭代器對象。下面這個類構造了一個迭代器接受一個可迭代的數字,每次迭代都返回上一次迭代結果的平方,當迭代結果大於9999999999999
時拋出異常。利用該類建立示例對數字2進行平方和迭代。對象
class IT_SQUARE:
def __init__(self, x):
self.x = x
def __next__(self):
self.x = self.x ** 2
if self.x > 9999999999999:
raise StopIteration
else:
return self.x
def __iter__(self):
return self
IT1 = IT_SQUARE(2)
while True:
try:
print(IT1.__next__())
except StopIteration:
break
複製代碼
示例結果字符串
4
16
256
65536
4294967296
複製代碼