0.

 

(1)

(a)iterable 可迭代(对象) 能力属性

指一个对象能够一次返回它的一个成员,for i in a_list 而不需要通过下标完成迭代。
例子包括所有序列类型(list, str, tuple), 以及 dict, file, 还包括定义了 __iter__() 或 __getitem__() 方法的类实例。

(b)iterator 迭代器 具体实现

代表数据流的对象。重复调用迭代器的 next() (python3为 __next__()) 方法将依次返回流中的项。当没有更多可用数据时,将抛出 StopIteration 异常。

(c)两者关系 iterator = iter(iterable)

使用可迭代对象时,通常不需要调用 iter() 或亲自处理迭代器对象。for 语句会自动创建一个临时未命名变量,以便在循环期间保存迭代器。

(2) 名叫 generator 生成器 的 iterator 迭代器:通过某种算法“生成”一系列数据,通过 for 循环 或 next() 逐个返回数据。

(a)简单算法:list comprehension 列表生成式直接返回完整列表,generator expression 生成器表达式返回名叫 generator 生成器 的 iterator 迭代器。

In [84]: [i**2 for i in range(10) if i % 2 == 0]
Out[84]: [0, 4, 16, 36, 64]

In [85]: (i**2 for i in range(10) if i % 2 == 0)
Out[85]: <generator object <genexpr> at 0x000000000A284CA8>

In [86]: [i**2 for i in range(10) if i % 2 == 0]
Out[86]: [0, 4, 16, 36, 64]

In [87]: gen = (i**2 for i in range(10) if i % 2 == 0)

In [88]: gen
Out[88]: <generator object <genexpr> at 0x000000000A3AE510>

In [89]: gen.next()
Out[89]: 0

In [90]: gen.next()
Out[90]: 4

In [91]: for i in gen:
    ...:     print i
    ...:
16
36
64

In [92]: gen.next()
---------------------------------------------------------------------------
StopIteration                             Traceback (most recent call last)
<ipython-input-92-b2c61ce5e131> in <module>()
----> 1 gen.next()

StopIteration:
View Code

相关文章: