yield

  • 带有 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 

你可能感兴趣的:(yield)