迭代器&迭代对象&生成器
Posted 曾春云
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迭代器&迭代对象&生成器相关的知识,希望对你有一定的参考价值。
迭代器 & 迭代对象 & 生成器
包含__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__只返回一个值
以上是关于迭代器&迭代对象&生成器的主要内容,如果未能解决你的问题,请参考以下文章