迭代器官方文件:
大多是的檔案物件可以用for迴圈語句,例如:
for element in [1, 2, 3]:
print(element)
for element in (1, 2, 3):
print(element)
for key in :
print(key)
for char in "123":
print(char)
for line in open("myfile.txt"):
print(line, end='')
這種風格是清晰簡潔方便的。在其背後是for語句不斷的呼叫容器物件的iter()方法,該方法返回乙個迭代器物件,該物件定義了__next()__方法,該方法一次訪問容器元素一次。當沒元素訪問時候,將丟擲stopiteration的錯誤。我們可以通過呼叫next()的內建方法嗲用__next__()方法。
>>> s = 'abc'
>>> it = iter(s)
>>> it
>>> next(it)
'a'>>> next(it)
'b'>>> next(it)
'c'>>> next(it)
traceback (most recent call last):
file "", line 1, in next(it)
stopiteration
知道原理之後很容易將迭代器的行為新增到自定義類中,定義乙個__iter__()方法返回乙個有__next()__方法的物件,例如:
class reverse:
"""iterator for looping over a sequence backwards."""
def __init__(self, data):
self.data = data
self.index = len(data)
def __iter__(self):
return self
def __next__(self):
if self.index == 0:
raise stopiteration
self.index = self.index - 1
return self.data[self.index]
>>> rev = reverse('spam')
>>> iter(rev)
<__main__.reverse object at 0x00a1db50>
>>> for char in rev:
... print(char)
...map
s
生成器官方文件:
生成器是乙個簡單且強大的工具可以用來創造迭代器。他們看起來很像一般的函式,但是用yield的語句返回資料。每次next()哈數被呼叫,生成器就重新從上次執行處繼續執行。
>>> for char in reverse('golf'):
... print(char)
...flo
g
def reverse(data):
for index in range(len(data)-1, -1, -1):
yield data[index]
任何生成器能做的時期,如前描述的基於類的迭代器也可以做到。自動建立的__iter__() 和__next__()方法是的生成器如此的簡潔。 python3生成器 Python3 生成器
python3 生成器 閱讀 125 發布於 2020 05 19 14 29 25 在python中,一邊迴圈一邊計算出元素的機制,稱為生成器 generator。生成器的優點 一次返回乙個結果,延遲計算。這對於大資料量處理,是個非常有用的優勢。占用記憶體量是工程師必須考慮的乙個問題。提高 可讀性...
十 python3 生成器
生成器 generator 在 python 中,不必建立完整的 list,從而節省大量的空間。一邊迴圈一邊計算的機制。建立乙個 generator,有很多種方法。第一種方法很簡單,只要把乙個列表生成式的 改成 就建立了乙個 generator l x x for x in range 10 l 0...
Python3 生成器與yield
斐波那契數列指的是這樣乙個數列 1 1 2 3 5 8 13 21 34 importtime def fib times a 0 b 1 n 1 while n times print b a,b b,a b n 1 fib 7 生成器寫法 deffib times a 0 b 1 n 1 whi...