当前位置: 首页 > 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 类示例说明了如何把生成器当作典型的迭代器使
用,即从集合中获取元素。不过,生成器也可用于生成不受数据源限制的值。下一节会举例说明。

相关文章:

  • Linux基本指令篇 —— more指令
  • Linu压缩解压
  • 平台组成-报表平台
  • 从台式电脑硬件架构看前后端分离开发模式
  • FPGA设计的用户约束
  • 基于微信小程序的旅游景点推荐设计与实现
  • PG靶机复现 Squid
  • ARM64 linux系统的一般执行过程
  • ​​Git提交代码Commit消息企业级规范
  • Qwen VLo :一个多模态统一理解与生成模型
  • PICkit3编程器MCLR引脚全解析
  • 汇总表支持表头分组,查询组件查询框可以调整高度,DataEase开源BI工具v2.10.11 LTS版本发布
  • 面向对象Plus(2/2)
  • 鸿蒙 SideBarContainer 开发攻略:侧边栏交互设计与多端适配
  • 设计在线教育项目核心数据库表
  • 2024百度之星:BD202404 110串
  • 判定表测试
  • Django ORM 1. 创建模型(Model)
  • yaml 导致的原型污染 -- GPN CTF 2025 Secure by Default
  • 基于51单片机-蜂鸣器演奏《飞雪玉花》