编程学习资讯网

Python 迭代器--编程学习网

发布时间:2018-04-18 08:53:02   来源:本站编辑   浏览次数:

迭代器都满足两个条件:
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

编程学习网 http://www.javalearns.cn

关注微信号:javalearns   随时随地学Java

或扫一扫

随时随地学Java