yield
2017-08-23 本文已影响0人
转身为墙
- 带有 yield 的函数在 Python 中被称之为 generator(生成器)
- 通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。
- 所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器(Generator)。
def AIexReadlines():
seek = 0
while True:
with open('D:/temp.txt') as f:
f.seek(seek) #将文件指针向前移动seek个字节
data = f.readline()
if data:
seek = f.tell() #获取当前文件读取指针,第一次读取后,seek等于行末
yield data
else:
return
#print AIexReadlines()
for item in AIexReadlines(): #迭代
print item