Python的迭代器集成在语言之中,迭代器和生成器是Python中很重要的用法,本文将深入了解迭代器和生成器。
首先,我们都知道for循环是一个基础迭代操作,大多数的容器对象都可以使用for循环,那么,我们从for循环开始:
你有没有想过,for循环的内部实现原理呢?
其实,在Python中,for循环是对迭代器进行迭代的语法糖,内部运行机理就是:首先底层对循环对象实现迭代器包装(调用容器对象的__iter__
方法)返回一个迭代器对象,每循环一步,就调用一次迭代器对象的__next__
方法,直到循环结束时,自动处理StopIteration这个异常。
对于像list,dict等容器对象而言,都可以使用for循环,但是它们并不是迭代器,它们属于可迭代对象。
什么是可迭代对象呢?
最简单的解释:实现了迭代方法可以被迭代的对象,可以使用isinstance()方法进行判断。
举个例子:
In [1]: from collections import Iterable, Iterator
In [2]: a = [1, 2, 3]
In [3]: isinstance(a, Iterable)
Out[3]: True
In [4]: b = a.__iter__()
In [5]: isinstance(b, Iterator)
Out[5]: True
可迭代对象实现了__iter__
方法,