python迭代器詳解

迭代器筆記:

什麼是可迭代對象:

  1. 用來做什麼的:用來給for...in...遍歷的。
  2. 已知的數據類型:listdicttuplestrset、生成器。
  3. 需要滿足的條件:需要實現一個__iter__的方法,並且這個方法要返回一個迭代器對象。

什麼是迭代器:

  1. 用來做什麼的:用來返回數據的,每次循環的時候都會調用迭代器的__next__或者next函數,通過這個方法來獲取數據
  2. 需要滿足的條件:
    • Python2中:要實現兩個方法,分別是__iter__方法和next方法。
    • Python3中:要實現兩個方法,分別是__iter__方法和__next__方法。

iter函數:

用來獲取一個可迭代對象的迭代器。

自己動手寫一個可以用for...in...遍歷的結構:

class MyRangeIterator(object):
    def __init__(self,start,end):
        self.index = start
        self.end = end

    def __iter__(self):
        return self

    def __next__(self):
        if self.index < self.end:
            temp = self.index
            self.index += 1
            return temp
        else:
            raise StopIteration()

class MyRange(object):
    """
    MyRange是可迭代對象
    """
    def __init__(self,start,end):
        self.start = start
        self.end = end

    def __iter__(self):
        # 這個方法中要返回一個迭代器對象
        return MyRangeIterator(self.start,self.end)

ret = MyRange(1,10)
for x in ret:
    print(x)

如果將迭代器和可迭代對象兩個身份都放在同一個對象中,那麼這時候,這個可迭代對象就只能遍歷一次:

class MyRange(object):
    """
    MyRange是可迭代對象
    """
    def __init__(self,start,end):
        self.start = start
        self.end = end
        self.index = start

    def __iter__(self):
        # 這個方法中要返回一個迭代器對象
        return self

    def __next__(self):
        if self.index < self.end:
            temp = self.index
            self.index += 1
            return temp
        else:
            raise StopIteration()

my_range = MyRange(1,10)
for x in my_range:
    print(x)

print('='*10)
for y in my_range:
    print(y)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章