Python中的生成器是什么
生成器的工作原理
只要Python函数的主体中有yield关键字,该函数就是生成器函数。调用生成器函数,返回一个生成器对象。也就是说,生成器函数是生成器工厂。
下面以一个简单的函数说明生成器的行为:
def gen123():yield 1yield 2yield 3print(gen123) # <function gen123 at 0x000002A486B4A200>
print(gen123()) # <generator object gen123 at 0x000002A486AF7270>
for i in gen123():print(i) # 1,2,3g = gen123()
print(next(g)) # 1
print(next(g)) # 2
print(next(g)) # 3
print(next(g)) # StopIteration
可以看出,在函数主体中我们使用了3个yield,输出gen123是函数对象,但是gen123()是个生成器对象。生成器对象实现了Iterator接口,因此生成器对象可以迭代。我们把gen123()赋值给g,因为g是迭代器,所以调用next(g)会获取yield产出下一项,直到所有项产出完以后,抛出StopIteration异常。
生成器函数创建一个生成器对象,包装生成器函数的主体。把生成器对象传递给next()时,生成器函数提前执行函数主体中的下一个yield语句, 返回产出的值,并在函数主体的当前位置暂停。最终,函数的主体返回时,Python创建的外层生成器对象抛出StopIteration异常。
惰性生成器
我们看下面的代码:
相关文章:
Python中的生成器是什么
生成器的工作原理 只要Python函数的主体中有yield关键字,该函数就是生成器函数。调用生成器函数,返回一个生成器对象。也就是说,生成器函数是生成器工厂。 下面以一个简单的函数说明生成器的行为: def gen123():yield 1yield 2yield 3print(gen123) # <function gen…...
【Camera2完整流程分析四】从log角度分析CameraService启动流程
下面直接带你通过log打印来一起读CameraService启动的过程。 1)Camera service对象构建,在启动的时候先创建CameraService 这里会打印: CameraService: CameraService started (pid=559)接着启动的时候会执行 –》onFirstRef() 进入这里面看,先输出打印: CameraService:…...
基于SSM SpringBoot vue教务排课系统
基于SSM SpringBoot vue教务排课系统 系统功能 登录 个人中心 学生信息管理 教师信息管理 课室信息管理 班级信息管理 系别信息管理 专业信息管理 课程信息管理 选课信息管理 课表信息管理 开发环境和技术 开发语言:Java 使用框架: SSM(Spring SpringMVC Myba…...
深入理解 LinkedList 及底层源码分析
LinkedList 是基于链表结构的一种 List,在分析 LinkedList 源码前我们先对对链表结构做一个简单的了解。 一、链表的概念 链表是由一系列非连续的节点组成的存储结构,简单分下类的话,链表又分为_单向链表和双向链表,而单向 / 双…...
美易官方:英伟达业绩将难以撑起股价?
美股市场似乎总是对各大公司的业绩表现抱有极大的期待,就像一个永远填不饱的“巨胃”。在这样的市场环境下,即使是业绩骄人的公司也可能难以支撑其股价。英伟达,这家在图形处理单元(GPU)领域享有盛誉的公司,…...
超实用干货!FP独立站引流攻略
在当前的市场环境下,对于希望继续从事FP和黑五类产品销售的商家来说,搭建独立站绝对是一个明智的选择。没有了第三方平台的限制,拥有自己的独立站意味着你可以完全掌控自己的商业策略和操作。 但脱离了平台,独立站推广会更加困难。…...
php之框架底层中间件模式开发实现、array_reduce的应用
众所周知php框架的中间件核心是通过array_reduce实现的 php之框架中间件模式开发实现、array_reduce的应用 1.先写个测试用例看一下函数的特性2.根据执行特性实现中间件 1.先写个测试用例看一下函数的特性 <?phpfunction kernal($a,$b){return $a . " and " .…...
fabric搭建生产网络
fabric搭建生产网络 一、生成组织结构与身份证书 解包 hyperledger-fabric-linux-amd64-2.5.0.tar.gz 1.1、crypto-config.yaml配置文件 ./bin/cryptogen showtemplate > crypto-config.yaml 将crypto-config.yaml内容修改为: # -------------------------…...
聊聊 ASP.NET Core 中间件(二):中间件和筛选器的区别
前言 有些小伙伴看到上一篇文章后,可能会发现中间件和我们之前讲的筛选器非常类似,比如它们都是通过 next 串起来的一系列的组件,并且都可以在请求处理前后执行代码,都可以通过不执行 next 来进行请求的终止。那么筛选器和中间件…...
Nginx配置Https缺少SSL模块
1、Linux下Nginx配置https nginx下载和安装此处就忽略,可自行百度 1.1、配置https 打开nginx配置文件 vim /opt/app/nginx/conf/nginx.conf相关https配置 server {listen 443 ssl; #开放端口server_name echarts.net;#域名#redirect to https#ssl on; #旧版#ssl证…...
超详细——集成学习——Adaboost实现多分类——附代码
资料参考 1.【集成学习】boosting与bagging_哔哩哔哩_bilibili 集成学习——boosting与bagging 强学习器:效果好,模型复杂 弱学习器:效果不是很好,模型简单 优点 集成学习通过将多个学习器进行结合,常可获得比单一…...
串口通信标准RS232 RS485 RS422的区别
很多工程师经常把RS-232、RS-422、RS-485称为通讯协议,其实这是不对的,它们仅仅是关于串口通讯的一个机械和电气接口标准(顶多是网络协议中的物理层),不是通讯协议,那它们又有哪些区别呢: 第一…...
jdk环境安装
jdk安装 创建软件安装的目录 mkdir -p /bigdata/{soft,server} /bigdata/soft 安装文件的存放目录 /bigdata/server 软件安装的目录 把安装的软件上传到/bigdata/soft 目录 解压到指定目录 -C :指定解压到指定目录 tar -zxvf /bigdata/soft/jdk-8u241-linux-x64.tar.gz -C /b…...
QT+网络调试助手+TCP服务器
一、UI界面设计 二、单线程 代码设计 1、 查找合法的本地地址,用于当作服务器的IP地址 #include <QThread> #include <QTcpSocket> #include <QNetworkInterface> #include <QMessageBox>QList<QHostAddress> ipAddressesList QNe…...
【unity】(1)场景
Unity的场景(Scene)是构建游戏中各种环境和级别的基础。一个场景可以包含游戏中的所有对象,如角色、道具、地形等。 创建和管理场景 创建新场景: 在Unity编辑器中,选择File > New Scene,或者使用快捷键…...
【Linux】进程间通信IPC机制
目录 一、无名管道 二、有名管道 三、共享内存 四、信号量 五、消息队列 六、套接字 一、无名管道 1.只能用于具有亲缘关系的进程之间的通信(也就是父子进程或者兄弟进程)。 2.是一个单工的通信模式,具有固定的读端和写端。 3.管道也可以看成是一种特殊的文件…...
【如此简单!数据库入门系列】之效率基石 -- 磁盘空间管理
文章目录 1 前言2 磁盘空间管理3 磁盘空间管理的实现4 存储对象关系5 总结6 系列文章 1 前言 如何将表中的记录存储在物理磁盘上呢? 概念模式中,记录(Record)表示表中的一行数据,由多个列(字段或者属性&…...
专业渗透测试 Phpsploit-Framework(PSF)框架软件小白入门教程(五)
本系列课程,将重点讲解Phpsploit-Framework框架软件的基础使用! 本文章仅提供学习,切勿将其用于不法手段! 继续接上一篇文章内容,讲述如何进行Phpsploit-Framework软件的基础使用和二次开发。 在下面的图片中&#…...
5月7日监控二叉树+斐波那契数
968.监控二叉树 给定一个二叉树,我们在树的节点上安装摄像头。 节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。 计算监控树的所有节点所需的最小摄像头数量。 示例 1: 输入:[0,0,null,0,0] 输出:1 解释ÿ…...
C++类的设计编程示例
一、银行账户类 【问题描述】 定义银行账户BankAccount类。 私有数据成员:余额balance(整型)。 公有成员方法: 无参构造方法BankAccount():将账户余额初始化为0; 带参构造方法BankAccount(int m)࿱…...
衍射光学元件微结构
衍射光学元件(DOEs)是利用刻蚀微结构的衍射特性将入射光束转换为所需光分布的光学元件,利用结构的周期性或无周期性分别创建离散的(分束器)或连续的模式(光束整形器、扩散器)。由于这些元件的工作原理是基于光通过这些图案表面的衍射,因此DOE光束整形器和…...
终极指南:如何用免费C工具快速管理天龙八部单机版游戏数据
终极指南:如何用免费C#工具快速管理天龙八部单机版游戏数据 【免费下载链接】TlbbGmTool 某网络游戏的单机版本GM工具 项目地址: https://gitcode.com/gh_mirrors/tl/TlbbGmTool 还在为《天龙八部》单机版的数据管理而烦恼吗?TlbbGmTool是一款专为…...
JupyterLab Desktop完整指南:5个秘诀让数据科学工作更简单
JupyterLab Desktop完整指南:5个秘诀让数据科学工作更简单 【免费下载链接】jupyterlab-desktop JupyterLab desktop application, based on Electron. 项目地址: https://gitcode.com/gh_mirrors/ju/jupyterlab-desktop 还在为Python环境配置和JupyterLab安…...
NCMconverter终极指南:3步高效解密网易云音乐NCM加密格式
NCMconverter终极指南:3步高效解密网易云音乐NCM加密格式 【免费下载链接】NCMconverter NCMconverter将ncm文件转换为mp3或者flac文件 项目地址: https://gitcode.com/gh_mirrors/nc/NCMconverter NCMconverter是一款开源高效的音频格式转换工具,…...
毕设救星:手把手教你用Android Studio和OkHttp3搞定OneNET新版API数据获取(附完整Java代码)
物联网毕设实战:Android Studio对接OneNET新版API全流程解析 在物联网相关专业的毕业设计中,如何快速构建一个能实际运行的设备数据监控APP往往是让本科生头疼的难题。本文将手把手带你完成从零开始的完整开发流程,重点解决三个核心痛点&…...
高光谱图像处理入门避坑指南:数据冗余、小样本和‘维数灾难’怎么破?
高光谱图像处理实战:破解数据冗余与小样本困境的技术路线 当第一次接触高光谱图像时,大多数研究者都会被其数据立方体的三维结构所震撼——数百个连续光谱波段构成的"超视觉"信息库,理论上能捕捉到人眼无法感知的物质指纹特征。但随…...
从NTC103到PT100:手把手教你为Arduino和STM32选型与编程(温度传感器实战)
从NTC103到PT100:手把手教你为Arduino和STM32选型与编程(温度传感器实战) 在物联网和智能硬件项目中,温度监测是最基础也最关键的环节之一。无论是恒温箱、环境监测站还是工业控制系统,选择一款合适的温度传感器往往决…...
从点击到意图:鸿蒙 App 的 AI 进化
子玥酱 (掘金 / 知乎 / CSDN / 简书 同名) 大家好,我是 子玥酱,一名长期深耕在一线的前端程序媛 👩💻。曾就职于多家知名互联网大厂,目前在某国企负责前端软件研发相关工作,主要聚…...
告别DLL缺失!用VS2019的Setup Project打包C++程序,保姆级配置指南
告别DLL缺失!用VS2019的Setup Project打包C程序,保姆级配置指南 在C开发中,最令人头疼的问题之一莫过于程序在其他电脑上运行时出现"DLL缺失"的错误。这种问题不仅影响用户体验,也让开发者陷入反复调试的困境。本文将带…...
指纹浏览器缓存机制原理与环境数据安全管控策略
引言绝大多数使用者在日常运用指纹浏览器搭建独立虚拟浏览环境时,重点注意力都集中在硬件指纹修改、代理网络绑定、基础参数调试等显性操作之上,往往忽略了软件内部缓存运行机制带来的各类隐性影响。虚拟环境运行过程中自动生成的页面缓存、站点数据、本…...
