可迭代对象的背后
可迭代对象的2种循环方法
#方法一 s='abc'#可迭代对象 for i in s: print(i) #方法二 it=iter(s)#构建迭代器 while True: try: print(next(iter(it))) except StopIteration: del s break
迭代器包含:__next__,__iter__方法
1.无参数的__next__方法是为了返回序列中的下一个元素,没有元素抛出StopIteration异常
2.__iter__方法是为了让迭代器可迭代
可迭代对象:__iter__方法
__getitem__方法
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 __len__(self): return len(self.words) def __repr__(self): return 'Sentence(%s)' % reprlib.repr(self.text) def __getitem__(self, index): return self.words[index] s3=Sentence('pig and pepper') for i in s3: print(i) ''' s3可迭代的原因是因为:__getitem__方法 python中的序列都可迭代的原因:都实现了__getitem__方法。 1.python中检查对象是否可迭代的步骤是先检查是否实现的__iter__方法 2.如果没有__iter__,但是实现了__getitem__方法,python解释器会创建一个迭代器,尝试按索引进行获取元素 3.如果尝试失败则会抛出Typeerror错误 '''