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

Python 可迭代的对象、迭代器 和生成器(Python 3.3中新出现的句法:yield from)

Python 3.3中新出现的句法:yield from

如果生成器函数需要产出另一个生成器生成的值,传统的解决方法是使
用嵌套的 for 循环。
例如,下面是我们自己实现的 chain 生成器:

>>> def chain(*iterables):
... for it in iterables:
... for i in it:
... yield i
...
>>> s = 'ABC'
>>> t = tuple(range(3))
>>> list(chain(s, t))
['A', 'B', 'C', 0, 1, 2]

chain 生成器函数把操作依次交给接收到的各个可迭代对象处理。为
此,“PEP 380 — Syntax for Delegating to a
Subgenerator”(https://www.python.org/dev/peps/pep-0380/)引入了一个
新句法,如下述控制台中的代码清单所示:

>>> def chain(*iterables):
... for i in iterables:
... yield from i
...
>>> list(chain(s, t))
['A', 'B', 'C', 0, 1, 2]

可以看出,yield from i 完全代替了内层的 for 循环。在这个示例中
使用 yield from 是对的,而且代码读起来更顺畅,不过感觉更像是语
法糖。除了代替循环之外,yield from 还会创建通道,把内层生成器直接与外层生成器的客户端联系起来。把生成器当成协程使用时,这个
通道特别重要,不仅能为客户端代码生成值,还能使用客户端代码提供
的值。第 16 章会深入讲解协程,其中有几页会说明为什么 yield
from 不只是语法糖而已。

一瞥 yield from 之后,我们回过头继续复习标准库中善于处理可迭代
对象的函数。

http://www.lryc.cn/news/578446.html

相关文章:

  • 静态工厂注入 vs 实例工厂注入
  • LINUX2.6设备注册与GPIO相关的API
  • FFmpeg 中./configure的解析
  • Linux基本命令篇 —— bc命令
  • 微软服务器安全问题
  • 【蓝牙】Linux Qt4查看已经配对的蓝牙信息
  • MCP 协议使用核心讲解
  • HDMI2.1 FRL流控 概览
  • 基于OPUS-MT模型的中译英程序实现
  • swing音频输入
  • Vue 安装使用教程
  • 【机器学习深度学习】模型微调的基本概念与流程
  • 动手实践:如何提取Python代码中的字符串变量的值
  • QA - RAG智能问答系统中的文档切片与实现原理
  • 深入金融与多模态场景实战:金融文档分块技术与案例汇总
  • 打造可观测的 iOS CICD 流程:调试、追踪与质量保障全记录
  • python下划线开头函数总结
  • 服务器安装 ros2时遇到底层库依赖冲突的问题
  • Crystaldiskinfo查询的硬盘参数信息
  • 2.3.1 Nginx Web服务器安全加固
  • 基于Pandas和FineBI的昆明职位数据分析与可视化实现(四)- 职位数据可视化(FineBI)
  • 【开源项目】一款真正可修改视频MD5工具视频质量不损失
  • Python 数据分析:numpy,抽提,布尔索引2。
  • github代码中遇到的问题-解决方案
  • 【C++】备忘录模式
  • mini-electron使用方法
  • 时空数据挖掘五大革新方向详解篇!
  • 多探头分布式雷达测流系统解决方案概述
  • HakcMyVM-Arroutada
  • 软考中级【网络工程师】第6版教材 第1章 计算机网络概述