1. 程式人生 > >python三大器之叠代器

python三大器之叠代器

ise 在一起 asi pan 可叠代對象 collect 讀取 ons 語句

python中的三大器有叠代器,生成器,裝飾器,本文重點講解下叠代器

叠代器:具備了__next__和__iter__方法的對象

可叠代對象:具備了__iter__方法的對象

1.可叠代對象,可以通過for...in...這類語句叠代讀取一條數據供我們使用的對象稱之為可叠代對象(Iterable),可以通過isinstance()判斷

In [1]: from collections import Iterable

In [2]: isinstance({},Iterable)
Out[2]: True

In [3]: isinstance((),Iterable)
Out[3]: True

In [
4]: isinstance("",Iterable) Out[4]: True In [5]: for item in {}: ...: pass ...: In [6]: for item in "": ...: pass ...: In [7]: for item in (): ...: pass ...:

2.for in的本質

li = [100, 200, 300, 400]
# for num in li:
#     print(num)


# 1. 通過調用可叠代對象的__iter__()獲取叠代器
# 2. 對叠代器調用__next__進行叠代操作,
# 如果沒有拋出StopIteration異常,表示叠代沒有結束,把獲取到的數據元素放到變量中 # 如果拋出了異常,表示叠代結束,退出執行 # 3. 執行循環體 # 4. 跳轉到第2步執行 iterator = li.__iter__() while True: try: num = iterator.__next__() except StopIteration: break else: print(num)

3.自定義叠代器

class MyIterable(object):
    def __init__
(self): self.container = [] # 定義一個容器 def add(self, item): self.container.append(item) def __iter__(self): return Iterator(self.container) # 返回一個叠代器 class Iterator(object): def __init__(self, container): self.container = container self.i = 0 def __next__(self): if self.i < len(self.container): count = self.i self.i += 1 return self.container[count] else: raise StopIteration def __iter__(self): pass mi = MyIterable() it = mi.__iter__() mi.add(1) mi.add(2) mi.add(3) for item in mi: print(item) from collections import Iterator print(isinstance(it, Iterator))

4.合並叠代器,Python要求定義的叠代的叠代器必須實現__iter__(self),並且返回self。通常,一個可叠代對象對象的叠代器都是固定的,並且,類與類

之間需要距離性,對象之間需要相似性,所以通常可叠代對象和叠代器寫在一起,就是下面的。

class MyIterable(object):
    def __init__(self):
        self.container = []
        self.i = 0

    def add(self, item):
        self.container.append(item)

    def __next__(self):
        if self.i < len(self.container):
            count = self.i
            self.i += 1
            return self.container[count]
        else:
            raise StopIteration

    def __iter__(self):
        return self


mi = MyIterable()
mi.add(1)
mi.add(2)
mi.add(3)

for item in mi:
    print(item)

python三大器之叠代器