1. 程式人生 > >python中的yield簡單使用

python中的yield簡單使用

當一個函式帶有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: