yeid可以把函数或者列表变成生成器(generator),如果只调用一部分结果,可以极大的缩减内存占用和增加运行速度,可以用next()或者循环得到生成器类型的数据。 generator可以用()表示。
1def fab(max): 2 n,a,b = 0,0,1 3 while n<max: 4 yield b 5 a,b = b,a+b 6 n += 1 7if __name__ == '__main__': 8 generator = fab(5) 9 print(next(generator)) 10 for n in fab(5): 11 print(n) 12
读取文件时也可以调用,避免一次性读取所有的数据。 下面代码是指定每次读取1024个字节的数据。
1 def read_file(fpath): 2 BLOCK_SIZE = 1024 3 with open(fpath,'rb') as f: 4 while True: 5 block = f.read(BLOCK_SIZE).decode('utf8') 6 if block: 7 yield block 8 else: 9 break
yield和return的区别: 简单理解就是 有yield每次执行时,返回yield后面的内容,然后暂停,再次执行这个含有yield的生成器函数时,会自动立即执行到上次暂停的位置继续执行,而return只会一次性把数据返回