天天看点

迭代器、生成器

容器:把多个元素组织在一起的数据结构。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)

>>> next(z)

>>> 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。

本文来自博客园,作者:Iving,转载请注明原文链接:https://www.cnblogs.com/SAS-T/p/9397938.html