Python3之手動建立迭代器

概述

迭代器便可以遍歷諸如列表,字典及字符串等序列對象甚至自定義對象的對象,其本質就是記錄迭代對象中每一個元素的位置。迭代過程從第一個元素至最後一個元素,且過程不能回滾或反方向迭代。python

兩個基本方法iter、next

序列對象能夠利用iter()直接建立迭代器,並經過next()便可迭代迭代器。bash

利用for循環迭代

S = 'PYTHON'
IT = iter(S)
for it in IT:
    print(it)
複製代碼

示例結果:ui

P
Y
T
H
O
N
複製代碼

利用next()迭代

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
複製代碼
相關文章
相關標籤/搜索