当前位置: 首页 > news >正文

Python 可迭代的对象、迭代器 和生成器(何时使用生成器表达式)

何时使用生成器表达式

在示例 10-16 中,为了实现 Vector 类,我用了几个生成器表达
式,eqhashabs、angle、angles、format、add
__mul__ 方法中各有一个生成器表达式。在这些方法中使用列表推
导也行,不过立即返回的列表要使用更多的内存。

通过示例 14-9 可知,生成器表达式是创建生成器的简洁句法,这样无
需先定义函数再调用。不过,生成器函数灵活得多,可以使用多个语句
实现复杂的逻辑,也可以作为协程使用(参见第 16 章)。

遇到简单的情况时,可以使用生成器表达式,因为这样扫一眼就知道代
码的作用,如 Vector 类的示例所示。

根据我的经验,选择使用哪种句法很容易判断:如果生成器表达式要分
成多行写,我倾向于定义生成器函数,以便提高可读性。此外,生成器
函数有名称,因此可以重用。

句法提示
如果函数或构造方法只有一个参数,传入生成器表达式时不用写一
对调用函数的括号,再写一对括号围住生成器表达式,只写一对括
号就行了,如示例 10-16 中 __mul__ 方法对 Vector 构造方法的调
用,转摘如下。然而,如果生成器表达式后面还有其他参数,那么
必须使用括号围住,否则会抛出 SyntaxError 异常:

def __mul__(self, scalar):if isinstance(scalar, numbers.Real):return Vector(n * scalar for n in self)else:return NotImplemented

目前所见的 Sentence 类示例说明了如何把生成器当作典型的迭代器使
用,即从集合中获取元素。不过,生成器也可用于生成不受数据源限制的值。下一节会举例说明。

http://www.lqws.cn/news/561205.html

相关文章:

  • 2099. 找到和最大的长度为 K 的子序列
  • 第6篇:中间件——Gin的请求处理管道
  • 大事件项目记录10-文章分类接口开发-更新文章分类
  • AtCoder AT_abc412_c [ABC412C] Giant Domino 题解
  • JavaEE:CAS单点登录
  • 数据结构1 ——数据结构的基本概念+一点点算法
  • 表达式求值
  • Brocade 博科交换机配置带外管理IP
  • 【unity游戏开发——网络】网络协议、TCP vs UDP 本质区别
  • 第九节:Vben Admin 最新 v5.0 (vben5) 快速入门 - 菜单管理(上)
  • AI间对话APK制成
  • Centos 8设置固定IP
  • STM32中Usart的使用
  • WordPress最新版6.8.1安装教程
  • 前缀和 + 哈希表
  • NV046NV060美光固态闪存NV061NV063
  • 从用户到权限:解密 AWS IAM Identity Center 的授权之道
  • Linux更改国内镜像源
  • ZooKeeper深度面试指南三
  • Hadoop集群异常:两个NameNode全部为StandBy状态
  • 【中文核心期刊推荐】《计算机工程与设计》
  • linux学习第26天(信号集)
  • llm 基本案例实现
  • 从OCR瓶颈到结构化理解来有效提升RAG的效果
  • C++ - 浅看vector源码
  • SpringBoot -- 以 jar 包运行(以及常见错误分析)
  • HarmonyOS NEXT仓颉开发语言实战案例:动态广场
  • Java面试题030:一文深入了解MySQL(2)
  • SpringMVC系列(六)(Restful架构风格(中))
  • Python助力自动驾驶:深度学习模型优化全攻略