Python中的生成器和迭代器

2021-09-22 18:45:18 字數 1057 閱讀 7456

所謂迭代器,是指具有next方法的物件。注意呼叫next方式的時候,不需要任何引數。呼叫next方法時,迭代器會返回它的下乙個值。如果迭代器沒有值返回,則會丟擲stopiteration的異常。

簡單示例:

list = [1, 2, 3]

it = list.__iter__() #呼叫列表的__iter__方法返回乙個迭代器

print(it)

>>> it.next()

1>>> it.next()

2>>> it.next()

3>>> it.next()

普通的函式遇到異常和return語句,函式的所有狀態都會被清空,再次呼叫這個函式的時候,所有的區域性變數,堆疊資訊都會被重新建立。

在python中,生成器通過生成器函式生成,生成器函式定義方法與普通函式一樣,唯一的不同就是使用yield關鍵字,一次返回乙個結果,在每個結果之間掛起與繼續他們的狀態,來實現迴圈

def myxrange(n):

print('myxrange beginning!')

i = 0

while i < n:

print("before yield, i is:", i)

yield i

i += 1

print("after yield, i is:", i)

print('myxrange endding!')

1.當呼叫生成器函式時候,函式返回的,只是乙個生成器物件,並沒有真正執行裡面的邏輯。

2.當next()方法第一次被呼叫以後,生成器才真正開始工作。一旦遇到yield語句,**便停止執行。注意此時的停止執行跟return的是不一樣的。

3.呼叫next()方法的時候,返回的是yield處的引數值

4.當繼續呼叫next()方法時,**將在上一次停止的yield語句處繼續執行,並且到下乙個yield處停止。

5.一直到後面沒有yield語句,最後丟擲stopiteration的異常。

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