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

  • 相关阅读:
    pyqt5 Button.click 报错:argument 1 has unexpected type 'NoneType'
    numpy 数组相减
    python 神经网络包 NeuroLab
    xgboost 和GBDT的区别
    stacking
    GBDT
    bp神经网络
    dataframe.isnull()函数, DatetimeIndex,黄包车代码155行
    【Linux】相关概念以及常用命令
    【Hive】优化策略
  • 原文地址:https://www.cnblogs.com/zengchunyun/p/9037481.html
Copyright © 2011-2022 走看看