產生器yield:使用yield語句
可以讓函數產生一個結果序列而不僅僅是一個值
def countdow(n): print("Start!"); while n>0: yield n; n -= 1; c = countdow(5); print(c.__next__()) print(c.__next__())
輸出結果:
Start! 5 4
__next__()方法使生成器函數一直運行到下一條yield
for i in countdow(5): print(i);
5 4 3 2 1
def tail(f): for line in f: if not line : #如果 非真 则暂时休眠并且再次尝试 time.sleep(0.1); continue; yield line; # 将获取到的文件中的值 生成一个序列的值 filecount = tail(open('E:/work.txt')); #grep方法 用于在上面方法生成器中查找特定的子字符串 def grep(lines,searchtext): for line in lines: if searchtext in line : yield line; lines = grep(filecount,'tom'); #查找带有tom 的子字符串 for line in lines: print(line);
rrreee
輸出結果:
'tom'
如:
rrreee
輸出結果:
'tom'
總結:
傳遞給了yield 程式不會輸出可認為在此時程式處於暫停的狀態當使用__next__()方法的時候函數繼續執行
直至再次遇到yield
優點:yield儲存的並不是單一的值,而是保存當前的程式執行狀態不用一次計算所有的元素而是用一次算一次節省內存空間