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

Python 生成器方法 send() 的执行过程

send()是生成器的一个特殊方法,它不仅能恢复生成器的执行,还能向生成器发送一个值,这个值会成为当前yield表达式的返回值。

一、send()的核心作用

方法作用能否传值
next(g)恢复执行到下一个yield不能
g.send(value)恢复执行,并传入一个值

说明send(value)传入的值会赋值给当前yield表达式

def demo(): x = yield 1 # yield 1 返回给外部,同时接收外部 send 的值 print(f"收到: {x}") y = yield 2 print(f"收到: {y}") yield 3 g = demo() print(next(g)) # 1(执行到第一个 yield,暂停) print(g.send(100)) # 100 赋给 x → 打印"收到: 100" → 执行到 yield 2 → 返回 2 print(g.send(200)) # 200 赋给 y → 打印"收到: 200" → 执行到 yield 3 → 返回 3

二、执行过程

代码示例

def accumulator(): total = 0 while True: value = yield total # ① 返回当前 total,等待接收值 if value is None: break total += value gen = accumulator()

逐步执行

步骤代码执行过程返回值
1next(gen)执行到yield totaltotal=0,暂停0
2gen.send(10)10赋给value
total += 10total=10
③ 回到循环,执行到yield total,暂停
10
3gen.send(20)20赋给value
total += 20total=30
③ 回到循环,执行到yield total,暂停
30
4gen.send(None)value=Nonebreak→ 生成器结束StopIteration

三、send()next()的等价关系

next(g) # 等价于 g.send(None)

实际上,next(g)内部调用的就是g.send(None)

def gen(): yield 1 yield 2 g = gen() print(next(g)) # 1 print(g.send(None)) # 2(等价于 next(g))

四、第一次调用不能用send()

规则:生成器第一次恢复执行时,必须用next(g)g.send(None),不能sendNone的值。

def gen(): x = yield 1 print(x) g = gen() # g.send(100) # TypeError: can't send non-None value to a just-started generator next(g) # 必须先启动 g.send(100) # 之后可以 send

原因:生成器在第一次执行前没有yield表达式来接收值。

五、send()的执行流程图

send(value)value传给当前暂停的yield表达式,yield表达式的返回值就是send传入的值。第一次调用必须用next(g)send(None)来启动生成器。

http://www.jsqmd.com/news/1332023/

相关文章:

  • KMS智能激活神器:5分钟搞定Windows和Office永久激活
  • 自动化爬虫数据质检抽样与飞书/钉钉报告推送模块实战:从每日入库数据到群内 Markdown 报告
  • Altium Designer高速PCB差分等长布线全流程与实战避坑指南
  • 珠宝改款定制镶嵌哪家好:前五**深度测评 - 服务品牌热点
  • DLSS Swapper完全指南:5步轻松管理游戏DLSS版本,提升性能30%
  • 移动自组织网络实战:从AODV协议到IPv6配置与性能优化
  • 如何用QtScrcpy实现专业级Android投屏:从基础连接到高级控制
  • 测试用例设计实战:从八大要素到车载、IoT场景的作战地图
  • AI 生图后怎么用剪映做成短视频?动效、配音、字幕和导出参数
  • UE5编辑器性能优化实战:从项目设置到工作流,告别卡顿提升效率
  • 广州月度账务整理公司口碑好哪家更靠谱?创业者机构测评与选择建议 - GrowthUME
  • 基于LLM与提示词工程:从文本描述到3D游戏原型的快速构建实践
  • 高解析度音频技术解析:从参数验证到频谱分析的工程实践
  • 如何高效批量保存抖音视频:从单个下载到作者主页完整备份的完整指南
  • Nano Banana 图像 API:为什么“一致性生成”正在成为 AI 作图的新刚需?
  • 2026年乌鲁木齐茅台酒回收市场观察:不同年份价格走势与正规渠道选择指南! - 优质品牌商家
  • DRAM内存工作原理全解析:从1T1C单元到DDR5时序参数
  • Linux离线部署VSCode:tar.gz手动安装与配置全攻略
  • 从 AI Worker 到 AI Team:为什么多 Agent 协作需要 Kanban
  • AI绘画提示词进阶:如何生成托尔金式史诗末日场景
  • Unity游戏多语言本地化实战:告别硬编码,构建动态字体与文本管理系统
  • 2026下半年软考报名表更新!10月24日开考,最早8月14日开报,速阅这张表
  • 遂宁全屋定制怎么选才不踩坑?2026年本地厂家深度分析 - 优质品牌商家
  • 2026国内4款大模型API聚合平台横向测评:价格、性能、接入成本全维度对比|数眼智能闭眼入
  • 2026五类家庭标准化除醛方案:新房急住•母婴房•新车•局部家具治理 - 精彩城市
  • UE4SS安装指南:7分钟搞定虚幻引擎4游戏模组注入器
  • uni-app 全量权限:统一别名、归一状态与多端分流
  • 异步与同步电机:电动与发电状态切换原理及工程实践
  • 基于3D Face HRN的虚拟主播快速生成:从单张照片到直播应用全流程
  • 2026年投资回报快的危废固废焚烧系统哪家好?这份优选指南值得一看 - geo交流