生成器
def gen_123():
yield 1
yield 2
yield 3
def x():
print(gen_123)
[print(i) for i in gen_123()]
g = gen_123()
next(g)
next(g)
next(g)
def gen_AB():
print('start')
yield 'A'
print('continue')
yield 'B'
print('end')
def y():
[print('-->', c) for c in gen_AB()]
惰性实现
RE_WORD = re.compile('\w+')
class Sentence:
def __init__(self, text):
self.text = text
def __repr__(self):
return 'Sentence(%s)' % reprlib.repr(self.text)
def __iter__(self):
for match in RE_WORD.finditer(self.text):
yield match.group()
def y():
s = Sentence('pig and dog')
# it = iter(s)
# print(next(it))
# print(next(it))
for i in s:
print(i)
y()
生成器表达式
import re, reprlib
from collections import abc
RE_WORD = re.compile('\w+')
class Sentence:
def __init__(self, text):
self.text = text
def __repr__(self):
return 'Sentence(%s)' % reprlib.repr(self.text)
def __iter__(self):
return (match.group() for match in RE_WORD.finditer(self.text))
def gen_AB():
print('start')
yield 'A'
print('continue')
yield 'B'
print('end')
def y():
res1 = [x*3 for x in gen_AB()]
[print('-->', i) for i in res1]
print('----------------')
res2 = (x*3 for x in gen_AB()) #返回的生成器并不在这使用
[print('-->', i) for i in res2]
y()
sentence_gen3.py--->
start
continue
end
--> AAA
--> BBB
----------------
start
--> AAA
continue
--> BBB
end