Python基本語法之迭代器和生成器

2021-09-01 11:47:58 字數 1883 閱讀 6536

迭代器

迭代是訪問集合類元素的一種方式,它可以記住遍歷的位置的物件,從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束,只能往前不會後退。字串、列表或元組物件都可用於建立迭代器。

迭代器有兩個基本的方法:iter()和next()。

迭代器示例如下:

import sys

list=[1,2,3,4]

it = iter(list)

for x in it:

print (x)

it = iter(list)

while true:

try:

print (next(it))

except stopiteration:

sys.exit()

示例執行結果:

自定義迭代器類

我們可以定義乙個類,作為乙個迭代器使用。

建立迭代器時需要在類中實現兩個python預定義方法 __iter__() 和 __next__() 。

__iter__() 方法返回乙個特殊的迭代器物件, __next__() 方法返回下乙個迭代器物件並通過 stopiteration 異常標識迭代的完成。stopiteration 異常用於標識迭代的完成,防止出現無限迴圈的情況。在 __next__() 方法中我們可以設定在完成指定迴圈次數後觸發 stopiteration 異常來結束迭代,從而實現指定迭代次數的迭代器類。

自定義迭代器示例如下:

import sys

class mynumbers:

def __iter__(self):

self.n = 1

return self

def __next__(self):

if self.n <= 9:

x = self.n

self.n += 1

return x

else:

raise stopiteration

myclass = mynumbers()

myiter = iter(myclass)

for x in myiter:

print(x)

示例執行結果:

生成器

在 python 中,使用了 yield 保留關鍵字的函式被稱為生成器(generator)。

跟普通函式不同的是,生成器是乙個返回迭代器的函式,只能用於迭代操作,在呼叫生成器執行的過程中,每次遇到 yield 時函式會暫停並儲存當前所有的執行資訊,返回 yield 的值, 並在下一次執行 next() 方法時從當前位置繼續執行。

生成器示例如下:

import sys

def getoddlist(n):

for i in range(1, n + 1):

if i % 2 != 0:

yield i

f = getoddlist(10)

while true:

try:

print (next(f))

except stopiteration:

sys.exit()

示例執行結果:

python語法 之 迴圈迭代

coding utf 8 while 條件 塊11 else 塊2 i 1while i 5 print 第 str i 次輸出 i 1 語法沒有i else print 完畢 for one in object 塊1 if 條件1 break if 條件2 continue else pass n...

python之迭代器

可迭代物件就是序列觀念的通用化,如果物件是實際儲存的序列,或者可以在迭代工具環境 eg for迴圈 中一次產生乙個結果的物件,就可看成是可迭代的。可迭代物件包括實際序列和按照需求而計算的虛擬序列。常見的迭代工具 for迴圈 列表解析 in成員關係測試以及map內建函式等。1.檔案迭代器 readli...

Python之迭代器

我們已經知道,可以直接作用於for迴圈的資料型別有以下幾種 一類是集合資料型別,如list tuple dict set str等 一類是generator,包括生成器和帶yield的generator function。這些可以直接作用於for迴圈的物件統稱為可迭代物件 iterable。可以使用...