python迭代器

迭代器用于從集合中取元素,生成器“憑空”生成元素

流暢的Python中這樣定義:迭代器是實(shí)現(xiàn)了無(wú)參數(shù)的 'next'方法,返回序列的下一個(gè)元素,;如果沒(méi)有元素了,那么拋出StopIteration異常。python迭代器還實(shí)現(xiàn)了,'iter '方法,因此迭代器也可以迭代。

import re
import reprlib

RE_WORD = re.compile('\w+')


class Sentence:

    def __init__(self, text):
        self.text = text
        self.words = RE_WORD.findall(text)  # 返回字符串列表

    def __repr__(self):
        return "Sentence(%s)" % reprlib.repr(self.text)

    def __iter__(self):
        return SentenceIteration(self.words)    # 實(shí)現(xiàn)實(shí)例化,并返回一個(gè)迭代器


class SentenceIteration:


    def __iter__(self, words):
        self.words = words  # 實(shí)例引用單詞列表
        self.index = 0  # self.index 由于確定下一個(gè)要獲取的

    def __next__(self):
        try:
            word = self.words[self.index]   # 獲得self.index索引位的單詞
        except IndexError:
            raise  StopIteration()  # 如果索引位沒(méi)有單詞,則拋出StopInteration異常
        self.index += 1   # 遞增
        return word  # 返回單詞

        def __iter__(self):  # 實(shí)現(xiàn)self.__iter__方法
            return self

迭代器和可迭代對(duì)象的區(qū)別
可迭代對(duì)象有一個(gè)iter方法,每次實(shí)例化一個(gè)新的迭代器,而迭代器要實(shí)現(xiàn)next方法,返回單個(gè)元素此外還要實(shí)現(xiàn)iter方法,返回迭代器本身。

例一

it = iter(range(4))
try:
    while 1:
        print(next(it))
except StopIteration:
    pass

it = iter(range(4))
try:
    while 1:
        print(next(it))
except StopIteration:
    pass
?
0
1
2
3

例二:

__doc__="""python 迭代器 設(shè)計(jì)模式 """

class Number():
    def __init__(self,number):
        self.number = number

    def __iter__(self):
        return NumberIter(self.number)

class NumberIter():

    def __init__(self,number):
        self.number = number
        self.index = 1

    def __next__(self):
        value = int(self.number/self.index)%10
        self.index *= 10
        if value < 1 :
            raise StopIteration
        return value


if __name__=="__main__":
    n = Number(1234)
    for i in n:
        print(i)
image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容