zoukankan      html  css  js  c++  java
  • 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 实例中提取匹配正则表达式的具体文本。

    生成器函数已经极大地简化了代码,但是使用生成器表达式甚至能把代码变得更简短。

  • 相关阅读:
    004-DQN
    003-sarsa
    002-Q Leaning
    001-强化学习简介
    阿里云GPU服务器配置深度学习环境-远程访问-centos,cuda,cudnn,tensorflow,keras,jupyter notebook
    003-keras模型的保存于加载
    004-linux常用命令-网络命令
    004-linux常用命令-压缩解压命令
    004-linux常用命令-添加管理员用户
    004-linux常用命令-用户管理命令
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/12966949.html
Copyright © 2011-2022 走看看