当你调用一个包含yield的函数时会发生什么?

2024-01-21

I read here https://stackoverflow.com/questions/19302530/python-generator-send-function-purpose/60042174?noredirect=1#comment109042384_60042174下面的例子:

>>> def double_inputs():
...     while True:      # Line 1
...         x = yield    # Line 2
...         yield x * 2  # Line 3
...
>>> gen = double_inputs()
>>> next(gen)       # Run up to the first yield
>>> gen.send(10)    # goes into 'x' variable

如果我正确理解上面的内容,这似乎意味着Python实际上会等到next(gen)“跑到”到Line 2在函数体内。换句话说,口译员会not开始执行函数体,直到我们调用next.

  1. 这实际上是正确的吗?
  2. 据我所知,Python 不进行 AOT 编译,并且除了解析代码并确保它是有效的 Python 之外,它不会“向前看”太多。它是否正确?
  3. 如果上述情况成立,Python 如何知道我何时调用double_inputs()需要等到我打电话next(gen)在它进入循环之前while True?

正确的。呼唤double_inputs从不执行任何代码;它只是返回一个generator目的。的存在yield当体内的表达def声明是parsed,改变了语义def语句来创建一个generator对象而不是function object.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当你调用一个包含yield的函数时会发生什么? 的相关文章

随机推荐

  • 如何修复生产中的 502 Bad Gateway 错误(Nginx)?

    当我尝试在数字海洋中托管的项目中上传大小约为 600MB 的大 csv 文件时 它尝试上传但显示 502 Bad Gateway Error Nginx 该应用程序是一个数据转换应用程序 这在本地工作时效果很好 sudo tail 30 v
  • javax.ejb.EJBException java.lang.IllegalStateException:无法检索 unitName 的 EntityManagerFactory

    我正在使用 EJB 开发 JavaEE 应用程序 我有一个名为Medico哪个代码是 Entity public class Medico implements Serializable private static final long
  • 为什么我不需要导出/导入 TypeScript 接口?

    我和我的同事一起创建了一个 Angular 5 应用程序 我为所有界面创建了一个文件夹 并按功能对它们进行分组 但是 我没有在它们上包含任何导出符号 并且在使用它们时 我永远不需要导入它们 它们只是存在并且不会产生任何编译错误 我喜欢这种方
  • “系统找不到文件 C:\ProgramData\Oracle\Java\javapath\java.exe”

    我在 Windows 8 上使用 JDK 8u25 并且 Java 安装遇到问题 我可以跑javac完全没问题 但是正在运行java产生此错误消息 The system cannot find the file C ProgramData
  • 在整个交易过程中始终使用“现在”的价值

    我正在寻找在整个交易中使用一致的当前日期和时间值的指南 我所说的事务大致指的是应用程序服务方法 此类方法通常执行单个 SQL 事务 至少在我的应用程序中是这样 环境背景 答案中描述的一种方法这个问题 https stackoverflow
  • Grails 客户端验证

    您 如果您 如何使用 grails 管理客户端验证 您使用插件还是使用 javascript 框架反映您的约束 干杯 我个人没有使用过它们 但这两个插件可能会对您有所帮助 http grails org plugin javascript
  • 需要下一状态传播进行反向传播的神经网络强化学习

    我正在尝试构建一个包含卷积和 LSTM 使用 Torch 库 的神经网络 以通过 Q 学习或优势学习进行训练 这两者都需要在更新状态 T 的权重之前通过网络传播状态 T 1 必须进行额外的传播会降低性能 这很糟糕 但不是too坏的 然而 问
  • 优化 MySQL 导入(将详细 SQL 转储转换为快速 SQL 转储/使用扩展插入)

    我们正在使用 mysqldump 和选项 complete insert skip extended insert创建保存在 VCS 中的数据库转储 我们使用这些选项 和 VCS 可以轻松比较不同的数据库版本 现在导入转储需要相当长的时间
  • 德尔福和 i18n

    Delphi 是否以任何方式支持国际化 我已经看到我可以为项目添加不同的语言 但这似乎会创建 dfm 文件的多个实例 因此 语言不能在运行时更改 我说得对吗 您如何处理国际化 如果您这样做 有没有最佳实践 Delphi 附带了一些工具来执行
  • jQuery 发布请求(不是 AJAX)

    在 ASP NET MVC 应用程序中 我使用 jQuery 在按钮单击时发布数据
  • 当弹出窗口打开时禁用后台的所有内容

    我正在开发一个基于 HTML JQuery 和 CSS 的网页 我想在其中使用简单的 div 标签打开弹出窗口 我想在弹出窗口打开时禁用后台的所有内容 这意味着虽然弹出 div 对用户可见 但他或她不应该能够单击网页上的任何其他内容 弹出窗
  • 画布中的鼠标偏移 [fabric.js]

    我已经阅读了 3 5 个关于鼠标偏移的主题 但我仍然不明白哪里混乱了 就我而言 60 时一切正常 另外40 的鼠标是偏移的 有时对象位置与鼠标行为无关 IE 和 Chrome 是最混乱的 我尝试编辑样式表和父 div 但没有任何结果 最糟糕
  • 对象没有 hasOwnProperty 方法(即未定义)- IE8

    这看起来很奇怪 这是我在IE8控制台中的实验 typeof obj1 object obj1 hasOwnProperty typeof obj2 object obj2 hasOwnProperty undefined 关于什么可能导致这
  • 向 App Store 提交 iPhone 应用程序的流程? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 是否需要先支付 99 美元才能观看视频以向 App Store 提交 iPhone 应用程序 还是可以在任何地方免费获得 您可以加入开发者计划并免费观
  • Python正则表达式在集合内匹配

    测试时http gskinner com RegExr http gskinner com RegExr 在线正则表达式测试器 正则表达式 jpg bmp 当 jpg 或 bmp 存在时返回结果 但是 当我在 python 中运行此正则表达
  • SSRS 2005 缺少 Microsoft.ReportingServices.Interfaces.dll

    我在 c program files SQL Server 90 Tools Binn 中缺少此 DLL 引用 我假设这是因为我没有安装 2005 客户端 我安装了 2005 年的所有服务 数据库实例 报告服务实例 SSAS 和 SSIS
  • 持续更新文件

    最终 我需要将 Spotify API 中的信息提供给应用程序 以显示 当前歌曲 信息 包括提示时间 因此需要不断轮询 API 并更新应用程序轮询的数据源 我仍在尝试从流而不是文件的角度来思考数据 所以我想出了这个小实验来了解如何不断更新文
  • PM2 - 语法错误:严格模式之外尚不支持块范围声明

    我目前正在 Ubuntu 服务器上安装 NodeJS 服务 该应用程序是用 CoffeeScript 编写的 并且可以自行运行良好 这就是我设置项目的方式 cd test project nvm use v4 9 1 npm install
  • Zeroinfl“系统在计算上是奇异的”,而预测变量没有相关性

    我正在尝试对一年中工人缺勤天数的计数数据 因变量 进行建模 我有一组预测变量 包括有关工人 有关他们的工作等的信息 其中大多数是分类变量 因此 需要估计大量系数 83 但由于我有超过 600 000 行 我认为这应该不会有问题 此外 我的数
  • 当你调用一个包含yield的函数时会发生什么?

    I read here https stackoverflow com questions 19302530 python generator send function purpose 60042174 noredirect 1 comm