生成器
在python中,使用了yield的函數(shù)被稱為生成器(generator)杰赛。
生成器是一個(gè)返回迭代器的函數(shù)又活,只能用于迭代操作,生成器就是一個(gè)迭代器搀突,
在調(diào)用生成器運(yùn)行的過程中刀闷,每次遇到y(tǒng)ield時(shí)函數(shù)會(huì)暫停并保存當(dāng)前所有的運(yùn)行信息,
并返回yield的值仰迁,并在下一次執(zhí)行next()方法時(shí)從當(dāng)前位置繼續(xù)執(zhí)行甸昏。
yield的好處: 節(jié)省內(nèi)存,只在需要時(shí)才生成一個(gè)徐许。
迭代器也不占內(nèi)存施蜜,for循環(huán)中用哪個(gè)取哪個(gè)
創(chuàng)建的兩種方法:
- (列表生成式)
- 使用yield關(guān)鍵字
用 yield 實(shí)現(xiàn)斐波那契數(shù)列:
#!/usr/bin/python3
import sys
def fibonacci(n): # 生成器函數(shù) - 斐波那契
a, b, counter = 0, 1, 0
while True:
if (counter > n):
return
yield a
a, b = b, a + b
counter += 1
f = fibonacci(10) # f 是一個(gè)迭代器,由生成器返回生成
while True:
try:
print (next(f), end=" ")
except StopIteration:
sys.exit()
執(zhí)行以上程序雌隅,輸出結(jié)果如下:
0 1 1 2 3 5 8 13 21 34 55