python之迭代器和生成器
可迭代对象
什么是可迭代对象,简单的理解就是可以用作for循环上的一些对象就是可迭代对象。常见的可以迭代对象有哪些呢?
列表、元组、字典、集合字符串和open()打开的文件
从代码角度来说,对象内部实现了__iter__()
方法或者实现了
__getitem__()
的方法
迭代器
迭代器是相对于可迭代对象(iterable)来说的,迭代器是继承了可迭代对象的。它相对于It而able而言,它实现了__iter__()和__next()__方法。
另外,迭代器不会一次性把所有的元素都加载到内存中,只是在需要的时候才返回结果。可以把一个可迭代对象通过一定的方法转变为迭代器。
字符串,列表或元祖对象可以通过 iter()来进行创建转换成迭代器
输出值通过next()函数来输出。
迭代器只能向前输出,不能向后输出。
异常捕获
生成器
在python中,使用了yield的函数被称为生成器
在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。
调用一个生成器函数,返回的是一个迭代器对象。
生成器表达式
遍历的时候一般用for循环去遍历,如果用next遍历,到最后会抛出一个停止的异常,不太友好
创造一个迭代器
把一个类作为一个迭代器使用需要实现2个方法__iter__()和__next()__
生成器的核心优势
不一次全部把数据加载进来,在需要的时候才加载进来。这样就能够避免大量的内存消耗,当然这里肯定是有一部分速度的损失的。