叠代器&叠代對象&生成器
阿新 • • 發佈:2018-05-14
通過 enc code __iter__ 元素 pytho __next__ erro 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__只返回一個值
叠代器&叠代對象&生成器