將生成器函式定義到類中

2021-09-02 01:46:29 字數 789 閱讀 1943

問題:想定義乙個生成器函式,但是他還涉及一些額外的狀態,我們希望能以某種形式將這些狀態暴露給使用者

解決方案:實現乙個類,將生成器函式**放到__iter__()方法中即可

import collections

class linehistory:

def __init__(self, lines, histlen=3):

self.lines = lines

self.history = collections.deque(histlen)

def __iter__(self):

""" 將生成器函式定義在__iter__()方法中並沒有對演算法做任何改變 """

for lineno, line in enumerate(self.lines, 1):

yield line

def clear(self):

self.history.clear()

# 要使用這個類,可以將其看做是乙個普通的生成器函式。但是,由於他會建立乙個類例項,所有可以訪問內部屬性

with open('somefile.txt') as f:

lines = linehistory(f) # 乙個生成器,可迭代

for line in lines:

if 'python' in line:

for lineno, hline in line.history:

print('{}:{}'.format(lineno, hline), end='')

python生成器函式 Python 生成器函式

一 生成器 生成器指的是生成器物件,可由生成器表示式得到,也可使用 yield 關鍵字得到乙個生成器函式,呼叫這個函式得到乙個生成器物件 生成器物件,是乙個可迭代物件,是乙個迭代器 生成器物件,是延遲計算 惰性求值的 1.1 生成器函式 函式體重包含 yield 語句的函式,就是生成器函式,呼叫後返...

生成器函式

pyhon優雅的魔力使生成器函式很特殊,它們像定格相機一樣工作。當乙個標準函式遇到return語句時,它會返回值,然後函式會丟棄內部的所有資料。當下次呼叫時,一切從頭開始。yield語句會做不同的事情。它像return一樣返回乙個值,但是它不會使函式丟棄資料,相反所有資料都被儲存起來。usr bin...

生成器函式

什麼是生成器 生成器是能夠動態提供資料的物件,生成器物件也是可迭代物件 例項 生成器有兩種 生成器函式 生成器表示式 生成器函式的呼叫將返回乙個生成器的物件,生成器物件是乙個可迭代物件 defmyyield 此函式為生成器函式 yield 2yield 3yield 5yield 7 此時生成乙個生...