Python for循环实现原理

发布于 2020-06-22  804 次阅读


for循环是对容器进行迭代的过程

什么是迭代?

迭代就是从某个容器对象中逐个读取元素,直到容器对象中没有更多元素为止。

哪些对象支持迭代操作?

实现了__iter__方法,并返回一个迭代器

什么是迭代器?

实现了__next__方法

>>> a=[1,2,3]
>>> b=a.__iter__() # 有__iter__方法说明a是个可迭代对象
>>> b
<list_iterator object at 0x7febdb2c5898>
>>> b.__next__() # 有__next__方法说明b是个迭代器
1
>>> b.__next__()
2
>>> b.__next__()
3
>>> b.__next__()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

for语句实现循环步骤

  • 判断对象是否是可迭代对象,不是可迭代对象直接报错,抛出TypeError异常,是可迭代对象则调用__iter__方法,并返回一个迭代器对象。
  • 迭代器对象调用__next__方法,每次按序从迭代器中取一个值
  • 当迭代器中没有更多元素时,抛出StopIteration异常

自定义迭代器

class MyRange:
    def __init__(self, num):
        self.num = num
        self.i = 0

    def __iter__(self):
        """告诉解释器我是可以返回迭代器的,迭代器就是我自己,没有__iter__方法时MyRange是一个迭代器不是一个可迭代对象"""
        return self

    def __next__(self):
        if self.i < self.num:
            i = self.i
            self.i += 1
            return i
        else:
            raise StopIteration

一名测试工作者,专注接口测试、自动化测试、性能测试、Python技术。