python中的yield簡單使用
阿新 • • 發佈:2019-01-28
當一個函式帶有yield表示式時,這個函式就不再是普通的函式,而是成為了一個生成器(generator),用於迭代,先來看下什麼是迭代器(iterator).
1.迭代器(iterator)
python中列表,元祖等其實就是迭代器,迭代就是把一個序列中的資料遍歷輸出:
items = [1, 2, 3, 4, 5, 6]
def iterat(object):
for element in object:
print(element)
iterat(items)
2.生成器(generator)from collections import deque def search(lines, pattern, history=5): previous_line = deque(maxlen=history) for line in lines: if pattern in line: previous_line.append(line) yield previous_line if __name__ == "__main__": with open('file.txt', 'r') as f: for prevline in search(f, 'python', 6): for pline in prevline: print('pline:',pline) print('-'*20)
生成器函式在在生成值後會自動掛起並暫停他們的執行和狀態,他的本地變數將儲存狀態資訊,這些資訊在函式恢復時將再度有效
在這裡,當search函式被呼叫時,返回的是一個生成器物件,支援迭代。
for prevline in search(f, 'python', 6):本質上也就相當於
for prevline in previous_line: