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