zoukankan      html  css  js  c++  java
  • 迭代器&迭代对象&生成器

    迭代器 & 迭代对象 & 生成器

    包含__next__ 和 __iter__两个方法的对象为迭代器
    __next__方法返回单个元素
    __iter__方法返回迭代器本身

    可迭代对象包含__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):  # <1>
            return SentenceIterator(self.words)  # <2>
    
    
    class SentenceIterator:
    
        def __init__(self, words):
            self.words = words  # <3>
            self.index = 0  # <4>
    
        def __next__(self):
            try:
                word = self.words[self.index]  # <5>
            except IndexError:
                raise StopIteration()  # <6>
            self.index += 1  # <7>
            return word  # <8>
    
        def __iter__(self):  # <9>
            return self
    

    Sentence是一个可迭代对象,通过__iter__方法返回一个新的迭代器
    SentenceIterator是一个迭代器,通过__iter__返回迭代器本身,每次调用__next__只返回一个值

  • 相关阅读:
    C# SQLiteHelper
    C# 自定义等待窗口
    C# Work PPT to PDF
    SQL 分隔字符串
    SQL 客户端查看
    SQL 自定义四舍五入
    SQL 并联更新
    C# 委托简单例子
    每天一个Linux命令(52)telnet命令
    每天一个Linux命令(51)ss命令
  • 原文地址:https://www.cnblogs.com/zengchunyun/p/9037481.html
Copyright © 2011-2022 走看看