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__只返回一个值

  • 相关阅读:
    为jquery添加扩展标准思路
    linux 相关命令
    通过设置PHPSESSID保存到cookie实现免登录
    CentOs7 配置nfs 系统
    ajax 异步 跨域上传图片
    php下载并安装pear脚本
    php基于swoole扩展的WebSocket
    php冒泡排序
    微信公众号验证TOKEN
    CSS清浮动处理(Clear与BFC)
  • 原文地址:https://www.cnblogs.com/zengchunyun/p/9037481.html
Copyright © 2011-2022 走看看