python(4)-迭代器 和 生成器

迭代器是访问集合元素的一种方式。迭代器适合遍历一些巨大或无限的集合,比如几个G的文件。迭代器具有以下特点:

1. 访问者不需要关心迭代器内部的结构,只需通过__next__()方法不断取下一个内容

2. 不能随机访问集合中的某个值,只能从头到尾依次访问

3. 访问只能向前,不能后退

4. 便于循环比较大的数据集合, 节省内存

比如:

with open("test.txt", 'r') as f:         # f 就是迭代器
    for line n f:           
        print(line)

迭代器的方法:

iter()   用于生成迭代器

>>> a = 'abcdeig'
>>> iter(a)
<str_iterator object at 0x00000000029ADE48>
>>> iter([1,2,3,4,5])
<list_iterator object at 0x00000000029ADEB8>

__next__()  取下一个元素

>>> a = 'abcdeig'
>>> a = iter(a)
>>> a.__next__()
'a'
>>> a.__next__()
'b'
>>> a.__next__()
'c'
>>> a.__next__()
'd'
>>> a.__next__()
'e'
>>> a.__next__()
'i'
>>> a.__next__()
'g'
>>> a.__next__()                        #没有元素时,会报Stop Iteration错误,表示没有值可以取了
Traceback (most recent call last): 
  File "<stdin>", line 1, in <module>
StopIteration

生成器: 如果一个函数返回一个迭代器,那么这个函数就是生成器;如果函数中包含yield语法,那么这个函数就会变成生成器。

下面代码是生成生成斐波那契数列的生成器:

def fab(max):
    n, a, b = 0, 0, 1
    while n < max:
        yield b
        a, b = b, a + b
        n = n + 1
posted @ 2016-02-28 20:20  黄小墨  阅读(301)  评论(0编辑  收藏  举报