迭代器、生成器

容器:把多个元素组织在一起的数据结构。List/dict/set/tuples….都是容器对象

大多数容器提供某种方式获取获取每一个元素,而是可迭代对象(iterable)赋予了容器这种能力,当然并不是所有的容器都是可迭代的。迭代器内部持有一个状态,该状态用于记录当前迭代所在的位置,以方便下次迭代的时候获取正确的元素。迭代器有一种具体的迭代器类型,比如list_iterator,set_iterator。

1

2

3

4

5

6

7

8

9

10

11

12

13

>>> x = [1, 2, 3]

>>> y = iter(x)

>>> z = iter(x)

>>> next(y)

1

>>> next(y)

2

>>> next(z)

1

>>> type(x)

<class 'list'>

>>> type(y)

<class 'list_iterator'>

这里x是一个可迭代对象,y和z是两个独立的迭代器(iterator)

,可迭代对象实现了__iter__方法,该方法返回一个迭代器对象。

Fib既是一个可迭代对象(因为它实现了__iter__方法),又是一个迭代器(因为实现了__next__方法)

任何实现了__iter____next__()(python2中next())方法的对象都是迭代器,__iter__返回迭代器自身,__next__返回容器中的下一个值,如

 

生成器其实是一种特殊的迭代器,它不需要再像上面的类一样写__iter__()和__next__()方法.函数有yield关键字就是生成器。

生成器是一种特殊的迭代器,它的返回值不是通过return而是用yield。

posted @ 2018-07-31 19:55  Iving  阅读(105)  评论(0编辑  收藏  举报