Python中的迭代器和生成器

2021-07-04 19:31:13 字數 1387 閱讀 7050

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 方法進行判...