Python 高階 迭代器與生成器

2021-07-11 22:48:03 字數 1189 閱讀 8201

特殊方法__iter__,是迭代器規則(iterator protocol)的基礎。

__iter__需要返回乙個迭代器(iterator),所謂的迭代器就是具有__next__()方法(該方法在呼叫時不需要任何引數)的物件。在呼叫__next__方法時,迭代器會返回它的下乙個值。如果__next()__方法被呼叫,而迭代器沒有值可以返回,就會引發乙個stopiteration異常。

class fibs:

def __init__(self):

self.a = 0

self.b = 1

def __next__(self):

self.a, self.b = self.b, self.a + self.b

return self.a

def __iter__(self):

return self

f = fibs()

for i in f:

if i > 1000:

break

print(i)

生成器的執行流程,在上次返回的 yield 語句處繼續執行;

def gen():

i = 0

while true:

i += 1

yield i

for item in gen():

print(item)

if item >= 10:

break

建立乙個生成器就像建立乙個函式一樣簡單。

我們以乙個展開(flatten)巢狀列表(list of lists)為例進行說明:

def flatten(nested):

for sublist in nested:

for elem in sublist:

yield elem

nested = [[1, 2], [3, 4], [5, 6]]

for num in flatten(nested):

print(num)

python高階 迭代器 生成器

迭代是訪問集合元素的一種方式。迭代器是乙個可以記住遍歷的位置的物件。迭代器物件從集合的第乙個元素開始訪問,直到所有 list tuple等都是可迭代物件,我們可以通過iter 函式獲取這些可迭代物件的迭代器。然後我們可以對獲取到的迭代器不斷使用next 函式來獲取下一條資料。iter 函式實際上就是...

python迭代器生成器高階

def num for i in range 1,4 print i,傳送出去 try a yield i print a,接受外部引數 except exception print 接收錯誤並處理 i num nu next i print nu,接收迭代引數 while true try if ...

Python 高階3 迭代器, 生成器

generator 生成器是一種特殊的迭代器,不需要自定義 iter 和 next 生成器函式 yield 生成器表示式 class range def init self,start,end none,step 1 if end is none self.end start self.start ...