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))