yield

yield功能:

1) 类似return作用, 返回值

2) 暂停迭代,直到调用下一个next()方法

3) 函数调用时返回生成器对象

一句话: 带有yield的函数是生成器,生成器是迭代器.生成器的生成和函数的调用差不多,但是只有对生成器使用next()方法时,代码才会执行.在执行的过程中,每遇到yield语句就发生中断, 并返回一个迭代值. 下次执行时从yield的下一个语句开始.看起来就像函数执行过程中被yield中断了很多次,每次中断通过yield返回当前迭代值.

实例:

yield

可以看到,我们生成了生成器,并使用next()方法来调用生成器.函数在初次运行遇到yield语句产生了中断,并返回当前迭代值6.

yield

当我们再次使用next()方法调用生成器时,函数在yield中断的的下一句继续执行,即res的赋值语句,因为6已经被yield返回了,所以res的赋值为none.函数再次遇到yield语句时发生中断并返回当前迭代值6.

注意: 在for循环里面会自动调用next()

yield

使用yield来读取文件的方法:

直接对文件对象调用read()方法,会导致不可预测的内存占用. 比较好的方法是使用固定长度的缓冲区来读取文件的内容.

yield