特殊方法__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 ...