Python 實現迭代器

2022-02-25 00:53:54 字數 1792 閱讀 2839

for語句呼叫iter()iter()返回__next__()方法。返回所有的之後,引發stopiteration異常來終止。

於是可以自己寫乙個__iter__()函式,返回self, 寫乙個__next__()方法,每次返回下乙個值,直到結束。

class student():

def __init__(self,name,age):

self.stu_list={}

self.add_stu(name,age)

self.index=len(self.stu_list)

def add_stu(self,name,age):

self.stu_list[name]=[name,age]

self.index=len(self.stu_list)

def __iter__(self):

return self

def __next__(self):

if self.index == 0:

raise stopiteration

self.index=self.index-1

return self.stu_list[list(self.stu_list.keys())[self.index]]

實現了乙個學生類,將學生名字作為key,value則是乙個list,list中包含姓名和年齡。

s=student('張華',19)

s.add_stu("李曉明",29)

s.add_stu("張茂",19)

此時s中是:

經過使用for語句:

for i in s:

print(i)

輸出內容:

['張茂', 19]

['李曉明', 29]

['張華', 19]

class student():

def __init__(self,name,age):

self.stu_list={}

self.add_stu(name,age)

self.index=len(self.stu_list)

def add_stu(self,name,age):

self.stu_list[name]=[name,age]

self.index=len(self.stu_list)

def itertool(self):

for i in self.stu_list:

yield self.stu_list[i]

同樣是剛剛的用例,只是把其中的迭代工具改為itertool注意其中的寫法,yield會記住上次到**了。

s=student('張華',19)

s.add_stu("李曉明",29)

s.add_stu("張茂",19)

輸入資料後,呼叫如下:

for i in s.itertool():

print(i)

結果是:

['張華', 19]

['李曉明', 29]

['張茂', 19]

python 迭代器 python迭代器

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

python的迭代器 Python 迭代器

迭代器 迭代是訪問集合元素的一種方式。迭代器是乙個可以記住遍歷的位置的物件。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。可迭代物件 以直接作用於 for 迴圈的資料型別有以下幾種 一類是集合資料型別,如 list tuple dict set str 等...

python的迭代器 python 迭代器

在介紹迭代器之前,先說明下迭代的概念 迭代 通過for迴圈遍歷物件的每乙個元素的過程。python的for語法功能非常強大,可以遍歷任何可迭代的物件。在python中,list tuple string dict set bytes都是可以迭代的資料型別。可以通過collections模組的iter...