首頁  >  文章  >  後端開發  >  python中的生成器yield

python中的生成器yield

黄舟
黄舟原創
2017-01-19 17:21:091428瀏覽

產生器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);

__next__()方法使生成器函數一直運行到下一語句為止時__next__()方法將返回值傳遞給了yield並且函數暫時中止執行 
再次調用__next__()時函數繼續執行此程序持續到生成器函數返回結束為止
通常不會手動調用__next__()方法

而是使用循環

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時將運行的值 

傳遞給了yield 程式不會輸出可認為在此時程式處於暫停的狀態當使用__next__()方法的時候函數繼續執行

直至再次遇到yield 


優點:yield儲存的並不是單一的值,而是保存當前的程式執行狀態不用一次計算所有的元素而是用一次算一次節省內存空間

🎜以上就是python中的生成器yield的內容,更多相關內容請關注PHP中文網(www.php.cn)! 🎜🎜🎜🎜
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn