Python生成器详解

观智能其它文章推荐:快来尝鲜!阿里开源3D人体重建模型,单张图片指定动作生成视频

生成器

1 生成器函数**(Generator function)**

  • 详解:

    生成器可以使用函数来创建,生成器函数使用yield关键字来产生值,而不是使用return。生成器可以被iter()、next()和for循环调用。在迭代时,生成器函数会从上一次的yield语句处恢复执行(Python保存了上下文),直到遇到下一个yield语句或函数结束。****
    所以说生成器是一种特殊的迭代器,更高级的迭代器,__iter__和__next__魔法函数由Python自动实现,不需要我们显式定义。

  • 案例

    做视频推理时使用生成器,即一次返回一帧的推理结果,而不是将所有帧的结果放在列表中一次性返回;

    做大语言模型推理时使用生成器,流式输出,而不是等待所有token生成后一次性返回。

  • 语法: 使用 yield 关键字定义生成器函数。

  • 优点: 可以看出,生成器的一个重要特性是懒惰计算,即它只在需要时才生成值。这意味着生成器不会一次性计算所有值并存储在内存中,从而节省了大量内存。

  • 示例:

    def fibonacci_generator():a, b = 0, 1while True:yield aa, b = b, a + bdef square_generator(iterable):for value in iterable:yield value * value#既然说在迭代中每次执行到下一个yield语句,那么可以定义一个最简单形式的生成器
    def simple_generator():yield 100yield 200yield 300if __name__ == '__main__':fib = fibonacci_generator()for _ in range(10):print(next(fib),end=" ")  # 输出: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34print()  # 换行for i in square_generator([1,2,3,4,5]):print(i,end=" ") #输出1 4 9 16 25print()#换行for i in simple_generator():print(i, end=" ") # 输出100 200 300
    

2 生成器表达式与列表推导式

生成器表达式是构建生成器的另一种方式,类似于列表推导式,但使用圆括号 () 而不是方括号 []

示例:

#通过生成器表达式构建生成器
gen = (x * x for x in range(5))#普通的列表推导式
l = [x*x for x in range(5)]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/40156.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python之网络编程

网络编程 互联网时代,现在基本上所有的程序都是网络程序,很少有单机版 的程序了。 网络编程就是如何在程序中实现两台计算机的通信。 Python语言中,提供了大量的内置模块和第三方模块用于支持各种 网络访问,而且Python语言在网络…

@Autowired 和 @Resource 注解的区别

前言 Autowired 和 Resource 是 Spring 中用于依赖注入的注解,但两者在实现机制和使用方式上有显著差异。 主要区别 1.来源不同 Autowired:由 Spring 框架提供(org.springframework.beans.factory.annotation),与 S…

2024年数维杯数学建模B题生物质和煤共热解问题的研究解题全过程论文及程序

2024年数维杯数学建模 B题 生物质和煤共热解问题的研究 原题再现: 随着全球能源需求的不断增长和对可再生能源的追求,生物质和煤共热解作为一种潜在的能源转化技术备受关注。生物质是指可再生能源,源自植物和动物的有机物质,而煤…

计算机网络——物理层设备

目录 ​编辑 中继器 集线器(Hub) 集线器,中继器的一些特性 集线器和中继器不能“无限串联” 集线器连接的网络,物理上是星型拓扑,逻辑上是总线型拓扑 集线器连接的各网段会“共享带宽” 中继器 如果我们想要网络…

NVIDIA NeMo 全面教程:从入门到精通

NVIDIA NeMo 全面教程:从入门到精通 文章目录 NVIDIA NeMo 全面教程:从入门到精通目录框架介绍NeMo的核心特点NeMo的架构NeMo与其他框架的比较NeMo的模型集合NeMo的工作流程NeMo 2.0的新特性 安装指南系统要求使用Docker容器安装步骤1:安装Do…

Chrome 134 版本开发者工具(DevTools)更新内容

Chrome 134 版本开发者工具(DevTools)更新内容 一、隐私与安全面板 旧的 Security 面板已演变为隐私与安全面板,并新增了一个专注于隐私的部分。在该部分中,可以: 在 DevTools 打开时,临时限制第三方 Co…

顺序表和链表

目录 线性表顺序表概念与结构分类静态顺序表动态顺序表 动态顺序表的实现SeqList.hSeqLIst.c 和 test.c初始化SLInit增容SLCheckCapacity尾插SLPushBack打印SLPrint头插SLPushFront尾删SLPopBack头删SLPopFront查找SLFind任意插SLInsert任意删SLErase销毁顺序表SLDestroy 顺序表…

性能测试、负载测试、压力测试的全面解析

在软件测试领域,性能测试、负载测试和压力测试是评估系统稳定性和可靠性的关键手段。​它们各自关注不同的测试目标和应用场景,理解这些差异对于制定有效的测试策略至关重要。 本文对性能测试、负载测试和压力测试进行深入分析,探讨其定义、…

FPGA_YOLO(二)

上述对cnn卷积神经网络进行介绍,接下来对YOLO进行总结,并研究下怎么在FPGA怎么实现的方案。 对于一个7*7*30的输出 拥有49个cell 每一个cell都有两个bbox两个框,并且两个框所包含的信息拥有30个 4个坐标信息和一个置信度5个,剩下就是20个类别。 FPGA关于YOLO的部署 1…

Windows系统安装Node.js和npm教程【成功】

0.引言——Node.js和npm介绍 项目描述Node.js基于Chrome V8引擎的JavaScript运行环境,使JavaScript可用于服务器端开发。采用单线程、非阻塞I/O及事件驱动架构,适用于构建Web服务器、实时应用和命令行工具等npmNode.js的包管理器与大型软件注册表。拥有…

使用外部事件检测接入 CDH 大数据管理平台告警

CDH 大数据管理平台 CDH(Cloudera Distribution Hadoop)是一个企业级的大数据平台,由 Cloudera 公司提供,它包含了 Apache Hadoop 生态系统中的多种开源组件,并对其进行了优化和集成,以支持大规模数据存储…

Node.js的安装和环境配置

漂亮女同事想了解Node.js的安装和环境配置。首先,我说需要回忆一下自己安装Node.js的经历,确保步骤是正确的。可能用户是刚接触开发的新手,所以需要详细但清晰的指导。 首先,应该介绍Node.js是什么,不过用户可能已经知…

在普通用户下修改root用户密码

1 从普通用户切换到root用户 sudo -s 再输入密码。 2 输入passwd ,会提醒你输入当前用户密码,验证后会提醒你输入root用户密码。 3 切换到root用户,使用修改过的密码登陆。 4 成功进入root用户。

【#2】介绍第三方库

一、JsonCpp 库 🔥 JSONCPP 是一个开源的 C 库,用于解析和生成 JSON(JavaScript Object Notation)数据。它提供了简单易用的接口,支持 JSON 的序列化和反序列化操作,适用于处理配置文件、网络通信数据等场…

Qt开发:QInputDialog的使用

文章目录 一、QInputDialog的介绍二、 QInputDialog的基本用法三、使用 QInputDialog的实例四、QInputDialog的信号与槽 一、QInputDialog的介绍 QInputDialog 是 Qt 提供的一个对话框类,用于获取用户输入的文本、整数或浮点数。它提供了简单易用的静态方法和可定制…

SCI一区 | Matlab实现DBO-TCN-LSTM-Attention多变量时间序列预测

SCI一区 | Matlab实现DBO-TCN-LSTM-Attention多变量时间序列预测 目录 SCI一区 | Matlab实现DBO-TCN-LSTM-Attention多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.【SCI一区级】Matlab实现DBO-TCN-LSTM-Attention多变量时间序列预测(程…

Vulnhub-Thales通关攻略

第0步:网卡配置 靶机端:将下载好的靶机环境,导入 VritualBox,设置为 Host-Only 模式 Kali端:将 VMware 中桥接模式网卡设置为 VritualBox 的 Host-only 第一步:确定靶机IP #靶机IP 192.168.56.101#KaliIP 1…

JVM 02

今天是2025/03/23 19:07 day 10 总路线请移步主页Java大纲相关文章 今天进行JVM 3,4 个模块的归纳 首先是JVM的相关内容概括的思维导图 3. 类加载机制 加载过程 加载(Loading) 通过类全限定名获取类的二进制字节流(如从JAR包、网络、动态…

Python学习笔记(7)关于列表创建,增加,删除

列表 **Python中一切都是对象 存放多个值的连续内存空间 大小可变 增加元素 a a[50]#➕运算符操作,产生了新对象 list.append(x) #将元素x增加至list尾部 list.extend(alist) #将列表alist增加至list尾部 list.insert(index.x) #将元素x插入list指定index位置 …

【图片识别Excel表格】批量将图片上的区域文字识别后保存为表格,基于WPF和阿里云的项目实战总结

一、项目背景 在信息处理和文档管理中,经常会遇到需要从大量图片中提取文字并进行整理的场景。例如,财务部门需要从大量报销票据中提取金额、日期等信息;法务部门需要从合同文档中提取关键条款;教育行业需要从试卷中提取学生的答题内容等。传统的手工处理方式不仅耗时长、…