python三大器之迭代器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python三大器之迭代器相关的知识,希望对你有一定的参考价值。
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三大器之迭代器的主要内容,如果未能解决你的问题,请参考以下文章