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

Python yeild关键字

定义生成器函数

def sync_generator(n):
    for i in range(n):
        yield i

python复制代码

  • def sync_generator(n): 定义了一个名为 sync_generator 的函数,它接受一个参数 n
  • for i in range(n): 在函数内部,有一个 for 循环,它遍历从 0 到 n-1 的整数序列。
  • yield i:在循环的每次迭代中,yield 关键字会返回一个值给调用者,并且暂停函数的执行。当下次迭代开始时,函数会从上次 yield 的地方继续执行。

使用生成器

for value in sync_generator(5):
    print(value)
  • for value in sync_generator(5): 这行代码调用了 sync_generator 函数,并传入参数 5。由于 sync_generator 是一个生成器函数,它返回一个迭代器对象。for 循环会遍历这个迭代器对象。
  • 在每次循环迭代中,sync_generator 函数会执行到 yield i,返回一个值 i 给 for 循环中的 value 变量。然后,函数会暂停执行,直到下一次迭代开始。
  • print(value):这行代码打印当前迭代中 value 的值。

执行流程

  1. 调用 sync_generator(5),函数开始执行,n 被设置为 5
  2. 进入 for 循环,i 被设置为 0
  3. 执行 yield 0,返回 0 给调用者,函数暂停执行。
  4. for 循环接收返回值 0,赋值给 value,并执行 print(value),打印 0
  5. for 循环请求下一个值,sync_generator 函数从上次暂停的地方继续执行,i 被设置为 1
  6. 重复步骤 3-5,直到 i 达到 4,函数执行完毕。

内存效率

生成器的一个关键优势是它们在迭代过程中只占用恒定的额外内存(不考虑迭代元素本身占用的内存)。这是因为它们一次只生成(或“yield”)一个值,而不是在内存中构建整个序列。这对于处理大量数据或无限序列特别有用。

在这个例子中,尽管我们迭代了一个包含5个元素的序列,但生成器函数本身并没有在内存中存储整个序列。它只是每次迭代时生成一个值,然后立即返回给调用者。


http://www.kler.cn/a/385211.html

相关文章:

  • Android关机流程知多少?
  • AOSP沙盒android 11
  • 移植 AWTK 到 纯血鸿蒙 (HarmonyOS NEXT) 系统 (9) - 编译现有的AWTK应用程序
  • VMware Workstation安装Centos系统
  • 【CentOS】中的Firewalld:全面介绍与实战应用(上)
  • 机器学习与AI|如何利用数据科学优化库存周转率?
  • 推荐一款ETCD桌面客户端——Etcd Workbench
  • 【NLP自然语言处理】深入探索Self-Attention:自注意力机制详解
  • RocketMQ延迟消息机制
  • 【架构论文-2】架构设计中存在的问题和改进方向
  • Linux/Unix echo命令
  • SAP ABAP开发学习——登录语言问题
  • springboot中使用jdbc查询数据库列表时,会出现数据库null值转换过程,很容易出现的错误
  • Oracle 第30章:最佳实践与案例研究
  • JVM 由多个模块组成,每个模块负责特定的功能
  • 详解Rust标准库:BTreeMap
  • go 集成gorm 数据库操作
  • npm install慢
  • ORACLE 删除archivelog日志
  • 最佳实践:如何实现函数参数之间的TS类型相依赖和自动推断
  • 基于微信小程序的电子购物系统的设计与实现(lw+演示+源码+运行)
  • Vue动态计算Table表格的高度
  • Spring Security(5.x, 6.x ) RBAC访问控制
  • 深入解析 WinForms MVVM 模式中的事件驱动与数据驱动
  • maven打jar包知识-运行包、依赖包、传递性
  • 解析json导出csv或者直接入库