生成器的本质是迭代器,是一种特殊的迭代器,能够动态(循环一次计算一次)提供数据。它的作用在于不必创建容器存储完整的结果,从而节省内存空间。数据量越大,优势越明显。协程就利用了生成器函数的yield方法,记录文件的上下帧,方便下次调用。
生成器是延迟操作,循环一次计算一次返回一次。通过yield返回值。
迭代器:可以被next()函数调用返回下一个值的对象。
python中的列表,字符串,字典属于可迭代对象,但不是迭代器,调用iter()方法后可转换成迭代器,被next()方法调用。
可迭代对象:具有__iter__()方法的对象。
for循环原理
-
先判断对象是否为可迭代对象,不是的话直接报错,抛出TypeError异常,是的话,调用 iter方法,返回一个迭代器
-
不断地调用迭代器的next方法,每次按序返回迭代器中的一个值
-
迭代到最后,没有更多元素了,就抛出异常 StopIteration,这个异常 python 自己会处理,不会暴露给开发者
-
# for循环原理 x=[1,2,3] x_iterator=x.__iter__() try: while True: print(x_iterator.__next__()) except StopIteration: pass