Python 實現迭代器


方法一: iter和next

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中是:

{'張華': ['張華', 19], '李曉明': ['李曉明', 29], '張茂': ['張茂', 19]}

經過使用for語句:

for i in s:
    print(i)

輸出內容:

['張茂', 19]
['李曉明', 29]
['張華', 19]

方法二:使用生成器 Generator

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]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM