python 3 生成器 and 迭代器

2021-08-19 17:19:05 字數 1800 閱讀 4118

迭代器官方文件:

大多是的檔案物件可以用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...