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

 

分类:

技术点:

相关文章: