码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-02-28 21:27:19      阅读:273      评论:0      收藏:0      [点我收藏+]

标签:

迭代器是访问集合元素的一种方式。迭代器适合遍历一些巨大或无限的集合,比如几个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

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

标签:

原文地址:http://www.cnblogs.com/huangxm/p/5225520.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!