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

【Python】一直没搞懂生成器是什么。。

生成器

上期我们讲解了迭代器:【Python】一直没搞懂迭代器是什么。。-CSDN博客
这期我们来讲讲它的好兄弟——生成器

生成器 (Generator)?

生成器是一种特殊的 迭代器 (Iterator)。
迭代器 是你可以逐个访问其元素的对象(比如在 for 循环中使用)。列表、元组、字典、字符串等都是可迭代对象,但它们不是迭代器本身。你可以通过调用 iter() 函数从可迭代对象获取迭代器。迭代器有一个 next() 方法,每次调用它会返回下一个元素,如果没有更多元素了,会引发 StopIteration 异常。
生成器 是一种创建迭代器的简单而强大的方法。它看起来像一个普通的函数,但关键区别在于它使用 yield 关键字来返回值,而不是 return

yield 是啥?

yield 是一个 Python 关键字,它有两个主要作用:

  1. 定义生成器函数: 任何包含 yield 语句的函数都会自动成为一个生成器函数。调用这个函数不会立即执行函数体,而是返回一个生成器对象(也就是一个迭代器)。
  2. 返回值并暂停: 当生成器函数的执行遇到 yield 语句时:
    • yield 后面的表达式的值会被返回给调用者(即正在迭代该生成器的代码)。
    • 函数的执行会在此处暂停,并保存当前的所有状态(包括局部变量)。
    • 当调用者请求下一个值时,函数会从暂停的地方恢复执行,直到遇到下一个 yield 或函数结束。
  3. 对比学习:yield vs return:
  • return彻底终止函数的执行,并返回一个值(或 None)。函数的状态不会被保存。

  • yield 只会暂停函数的执行,并返回一个值。函数的状态会被保存,以便下次可以恢复。一个生成器函数可以有多个 yield 语句。

yield生成器,它们俩两个的关系?

    <
http://www.xdnf.cn/news/3849.html

相关文章:

  • 【25软考网工】第五章(5)ICMP和ICMPv6、NDP、IP组播技术和MPLS
  • JavaScript基础-分支流程控制
  • strstr()和strpbrk()函数的区别
  • 学习黑客开源情报
  • Go语言接口实现面对对象的三大特征
  • 基于大模型的隐睾(睾丸可触及)预测及临床干预策略研究报告
  • spring中的@Profile注解详解
  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】2.3 窗口函数与高级聚合(ROW_NUMBER()/RANK()/SUM() OVER())
  • 民法学学习笔记(个人向) Part.3
  • Python 库 petrel_client.client 浅入浅出
  • 【CISCO】什么是静态路由(Static Route)?ip route 192.0.1.0 255.255.255.0 200.0.0.1
  • 一周学会Pandas2 Python数据处理与分析-Pandas2复杂数据查询操作
  • 【前端】【面试】在 Nuxt.js SSR/SSG 应用开发的 SEO 优化方面,你采取了哪些具体措施来提高页面在搜索引擎中的排名?
  • NPP库中libnppist模块介绍
  • 利用flask设计接口
  • 学习黑客 week1周测 复盘
  • AIDC智算中心建设:计算力核心技术解析
  • 0.0973585?探究ts_rank的score为什么这么低
  • Spring AI 实战:第十章、Spring AI RAG之博学多才
  • 构建“设备数据抽取 + 可视化”华为云rest、soap、roma和自定义的这些连接器类型和作用说明
  • 【人工智能学习笔记 二】 MCP 和 Function Calling的区别与联系
  • OpenCV入门指南:从环境搭建到第一个图像处理程序
  • ios systeam introduction
  • 机器学习和深度学习的对比
  • 科普简洁版:同态加密——密码学的未来瑰宝
  • 五一作业-day01
  • STM32Cube-FreeRTOS任务管理工具函数-笔记
  • 【QT】QT中的网络编程(TCP 和 UDP通信)
  • ES6入门---第二单元 模块五:模块化
  • 【Godot】使用 Shader 实现可配置圆角效果