Python 迭代器

python学习网 2018-04-18 07:11:01

迭代器都满足两个条件:
1.有 iter 方法
2.有 next 方法

生成器都是迭代器,迭代器不一定是生成器
list, tuple, dict, string 都是 Iterable (可迭代对象)

from collections import Iterable, Iterator

l = [1, 2, 3, 4, 5]
d = iter(l)                     # 调用 l.__iter__() 方法
print(d)                        # list_iterator
print(next(d))
print(isinstance(l, list))      # True
print(isinstance(l, Iterable))  # True
print(isinstance(l, Iterator))  # False
print(isinstance(d, Iterator))  # True

运行结果:
<list_iterator object at 0x00000242BD844DA0>
1
True
True
False
True

这里 l 是一个可迭代对象,可迭代对象是一种通俗的叫法,并不是指某种具体的数据类型,list是可迭代对象,dict是可迭代对象,set也是可迭代对象。 d 是迭代器,迭代器内部持有一个状态,该状态用于记录当前迭代所在的位置,以方便下次迭代的时候获取正确的元素。
迭代器有一种具体的迭代器类型,比如 list_iterator , set_iterator 。
可迭代对象实现了__iter__和__next__方法(python2中是 next 方法,python3是__next__方法),这两个方法对应内置函数 iter() 和 next() 。__iter__方法返回可迭代对象本身,这使得他既是一个可迭代对象同时也是一个迭代器。

for 循环内部三件事

  • 调用可迭代对象的 iter 方法返回一个迭代器对象
  • 不断调用迭代器对象的 next 方法
  • 处理 StopIteration
for l in [1, 2, 3, 4, 5]:
    print(l)

运行结果:
1
2
3
4
5
阅读(775) 评论(0)