python 生成器:生成器基础惰性实现
Posted 秋华
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 生成器:生成器基础惰性实现相关的知识,希望对你有一定的参考价值。
简介
设计 Iterator 接口时考虑到了惰性:next(my_iterator) 一次生成一个元素。
懒惰的反义词是急迫,其实,惰性求值(lazy evaluation)和及早求值(eager evaluation)是编程语言理论方面的技术术语。
re.finditer 函数是 re.findall 函数的惰性版本,返回的不是列表,而是一个生成器,按需生成 re.MatchObject 实例。
如果有很多匹配,re.finditer 函数能节省大量内存。我们要使用这个函数让第 4版 Sentence 类变得懒惰,即只在需要时才生成下一个单词。
示例 14-7 sentence_gen2.py: 在生成器函数中调用 re.finditer生成器函数,实现 Sentence 类
import re import reprlib 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() ?
? 不再需要 words 列表。
? finditer 函数构建一个迭代器,包含 self.text 中匹配 RE_WORD的单词,产出 MatchObject 实例。
? match.group() 方法从 MatchObject 实例中提取匹配正则表达式的具体文本。
生成器函数已经极大地简化了代码,但是使用生成器表达式甚至能把代码变得更简短。
以上是关于python 生成器:生成器基础惰性实现的主要内容,如果未能解决你的问题,请参考以下文章