迭代是訪問集合元素的一種方式。迭代器是乙個可以記住遍歷的位置的物件。迭代器物件從集合的第乙個元素開始訪問,直到所有
list、tuple等都是可迭代物件,我們可以通過iter()函式獲取這些可迭代物件的迭代器。然後我們可以對獲取到的迭代器不斷使用next()函式來獲取下一條資料。iter()函式實際上就是呼叫了可迭代物件的__iter__方法。
class
fibiterator
(object):
"""斐波那契數列迭代器"""
def__init__
(self, n)
:"""
:param n: int, 指明生成數列的前n個數
"""self.n = n
# current用來儲存當前生成到數列中的第幾個數了
self.current =
0# num1用來儲存前前乙個數,初始值為數列中的第乙個數0
self.num1 =
0# num2用來儲存前乙個數,初始值為數列中的第二個數1
self.num2 =
1def
__next__
(self)
:"""被next()函式呼叫來獲取下乙個數"""
if self.current < self.n:
num = self.num1
self.num1, self.num2 = self.num2, self.num1+self.num2
self.current +=
1return num
else
:raise stopiteration
def__iter__
(self)
:"""迭代器的__iter__返回自身即可"""
return self
if __name__ ==
'__main__'
: fib = fibiterator(10)
for num in fib:
print
(num, end=
" ")
使用了yield關鍵字的函式不再是函式,而是生成器。(使用了yield的函式就是生成器)
yield關鍵字有兩點作用:
儲存當前執行狀態(斷點),然後暫停執行,即將生成器(函式)掛起
將yield關鍵字後面表示式的值作為返回值返回,此時可以理解為起到了return的作用
可以使用next()函式讓生成器從斷點處繼續執行,即喚醒生成器(函式)
python3中的生成器可以使用return返回最終執行的返回值,而python2中的生成器不允許使用return返回乙個返回值(即可以使用return從生成器中退出,但return後不能有任何表示式)。
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 高階 迭代器與生成器
特殊方法 iter 是迭代器規則 iterator protocol 的基礎。iter 需要返回乙個迭代器 iterator 所謂的迭代器就是具有 next 方法 該方法在呼叫時不需要任何引數 的物件。在呼叫 next 方法時,迭代器會返回它的下乙個值。如果 next 方法被呼叫,而迭代器沒有值可以...
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 ...