生成器代替迭代器
import re import reprlib RE_WORD = re.compile('\w+') ''' 生成器是迭代器 ''' def gen_123(): print('start') yield 'A' print('continue') yield 'B' print('end') for i in gen_123(): print('-->', i) ''' 第一个循环: start --> A 第二个循环 continue --> B 第三个循环: end for循环会捕获stopiteration的异常 ''' class Sentence: def __init__(self, text): self.text = text self.words = RE_WORD.findall(text) def __repr__(self): return 'Setence(%s)' % reprlib.repr(self.text) def __iter__(self): for word in self.words: yield word # 含有yield关键字,就是一个生成器函数 return ''' 使用生成器代替去实现一个迭代器 ''' # s4 = Sentence('pig and pepper') # it = iter(s4) # print(it) # <generator object Sentence.__iter__ at 0x000001C8EA074AF0> # print(next(it)) # print(next(it)) # print(next(it)) # 使用re。finditer返回生成器 class Sentence2: def __init__(self, text): self.text = text def __repr__(self): return 'Setence(%s)' % reprlib.repr(self.text) def __iter__(self): for match in RE_WORD.finditer(self.text): yield match.group() # 含有yield关键字,就是一个生成器函数 return s4 = Sentence2('pig and pepper') it = iter(s4) # <generator object Sentence.__iter__ at 0x000001C8EA074AF0> print(next(it)) print(next(it)) print(next(it))
1
def gen_123(): print('start') yield 'A' print('continue') yield 'B' print('end') res1 = [x * 3 for x in gen_123()] ''' 输出: start continue end ''' res2 = (x * 3 for x in gen_123()) # print(res2) # print(next(res2)) # print(next(res2)) # print(next(res2))