博众娱乐平台开发与python学习

可迭代的对象、迭代器和生成器
迭代是数据处理的基石。扫描内存中方不下的数据集时,我们要找一种惰性获取数据项的方式,即按需一次获取一个数据项。这就是迭代器模式。

1可迭代对象

1.1序列可以迭代的原因

解释器需要迭代对象x时,会自动调用iter(x),内置的iter函数有以下作用:

检查对象是否实现了iter方法,如果实现了就调用它,获取一个迭代器。

如果没有实现iter方法,但是实现了getitem方法,python会创建一个迭代器,尝试按顺序(从索引0开始)获取元素

如果尝试失败,python抛出TypeError异常,通常会提示”C object is not iterable“,其中C是目标迭代对象

2 迭代器

2.1迭代器的接口

标准的迭代器接口有两个方法:

next:返回下一个可用的元素,如果没有元素了,抛出StopIteration

iter:返回self,以便在应该使用可迭代对象的地方使用迭代器,例如在for循环中

6.2.2 一个经典的迭代器

#可迭代对象和迭代器一定不能在一个对象中同时实现,一下为典型的迭代器
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 __iter__(self):
    return SentenceIterator(self.words)
def __repr__(self):
    return 'Sentence(%s)' % reprlib.repr(self.text)

#实现迭代器
class SentenceIterator(self,words):
def init(self,words):
self.words = words
self.index = 0
def next(self):
try:
word = self.words[self.index]
except IndexError:
raise StopIteration()
self.index += 1
return word
def iter(self):

猜你喜欢

转载自blog.51cto.com/13915799/2156771