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