码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-05-14 18:37:57      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:pre   error   __iter__   code   可迭代对象   生成   调用   span   source   

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

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

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

标签:pre   error   __iter__   code   可迭代对象   生成   调用   span   source   

原文地址:https://www.cnblogs.com/zengchunyun/p/9037481.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!