python中的迭代器是非常實用的,但是迭代器只能應用在類序列物件上,比如列表、元組和字典。除非生成迭代器的類,否則無法在非類序列物件上呼叫next()方法。
自己可以定義迭代器的類,只要滿足:
1. 類定義中有next()方法
2. 類提供能返回迭代器例項的__iter__()方法
code example:
class myiterate(object):
def __init__(self,step):
self.step = step
def next(self):
if self.step<=0:
raise stopiteration
self.step -= 1
return self.step
def __iter__(self):
return self
為使呼叫函式可以像類序列那樣使用next()方法,python2.3引入生成器概念。生成器的定義是:帶有yield語句的函式。一般的函式在一次呼叫過程中只會返回一次,但是yield語句的引入使得生成器物件(函式)能夠暫停執行並返回中間結果;當next()方法再次被呼叫的時候,生成器會從中斷的地方繼續執行下去。
下面結合**講解生成器的使用:
>>> def counter(start=0):
... count = start
... while true:
... reset = (yield count)
... if reset is not none:
... count = reset
... else:
... count += 1
>>> count = counter(0) #呼叫函式生成生成器物件,然後才能呼叫 next() 方法
>>> count.next()
>>> count.next()
>>> count.next()
>>> count.send(7)
>>> count.next()
>>> count.close()
對於上面的**,每次給 count 物件呼叫 next() 方法都會返回 count 的值;if 語句則判定是否需要重置 count 。如果沒有呼叫 send 方法,(yield count) 的返回給 reset 的值為 none,從而 count 執行加一操作;如果呼叫 send 方法,則 (yield count) 的返回給 reset 的值為 send 方法的引數,從而完成重置操作。
**中的生成器一直在執行,最後呼叫 close 方法來使**停止。
python中迭代器和生成器
迭代器 迭代器的實質是實現了next 方法的物件,常見的元組 列表 字典都是迭代器。迭代器中重點關注兩種方法 iter 方法 返回迭代器自身。可以通過python內建函式iter 呼叫。next 方法 當next方法被呼叫的時候,迭代器會返回它的下乙個值,如果next方法被呼叫,但迭代器沒有只可以返...
python中迭代器和生成器
1 迭代器 iterator 是乙個實現了迭代器協議的物件,python的一些內建資料型別 列表,陣列,字串,字典等 都可以通過for語句進行迭代,我們也可以自己建立乙個容器,實現了迭代器協議,可以通過for,next方法進行迭代,在迭代的末尾,會引發stopiteration異常。迭代器有兩個基本...
python中迭代器和生成器
這裡的迭代可以指for迴圈,在python中,對於像list,dict和檔案等而言,都可以使用for迴圈,但是它們並不是迭代器,它們屬於可迭代物件。1.1什麼可迭代物件 最簡單的解釋 可以使用for.in.語句進行迴圈的物件,就是可迭代物件 iterable 可以使用isinstance 方法進行判...