php yield使用

一,概念

yield简单的调用形式看起来像一个return申明,不同之处在于普通return会返回值并终止函数的执行,而yield会返回一个值给循环调用此生成器的代码并且只是暂停执行生成器函数。yield只有在调用的时候才会执行,并不产生多余的值,比如读取一个很大的文件或者计算大量的数据时,如果直接读取很有可能内存就爆了,而yield就可以做到把数据一行行读取到php运行内存,并非一次性读取到php运行内存,这样在运行时就会节省大量的内存;还有在遍历数据库的所有记录的时候,这个记录可能会很大,例如100万行,那么通过传统的办法就行不通了,首先通过web访问,php有超时时间,默认是30秒,那么就只能通过php cli的方式来执行,这样就没有超时时间了,但由于数据量太大,php循环时需要将数据全部载入内存中执行,由于数据量太大,php会报Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 4096 bytes)的错误,php默认的内存限制为128M,虽然可以通过修改php.ini中memory_limit的选项的值来提高内存限制,但始终不是最优的解决办法,这时通过生成器函数就可以极大节省内存开销

二,代码示例
function createRange($num){
	$data=[];
	for($i=0;$i<$num;$i++){
		$data[]=time();
	}
	return $data;
}

$res=createRange(10);
foreach($res as $key=>$value){
	sleep(1);
	echo $value."<br />";
}

运行结果为
在这里插入图片描述
使用yield 创建一个生成器

function createRange($num){
	for($i=0;$i<$num;$i++){
		yield time();
	}
}
$res=createRange(10);
foreach($res as $key=>$value){
	sleep(1);
	echo $value."<br />";
}

运行结果如下
在这里插入图片描述
未使用生成器的时候,createRange 很快生成一个 10个元素的数组$data,并立即返回,所以foreach 的是一个固定的数组。使用生成器后,createRange 不是一次性生成10元素,而是在foreach 中调用他的时候,他生成一个元素返回,并暂停。就是 foreach一次,for一次。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

点云分割报告整理(未完成版-每天写一点)

体积占用网格表示对点进行体素化&#xff0c;然后使用3d卷积神经网络来学习体素级语义。由于点云的稀疏性&#xff0c;体素化效率低&#xff0c;为避免较高的计算成本而忽略了细节。此外&#xff0c;由于同一体素内的所有点都被赋予了相同的语义标签&#xff0c;因此精度受到限…

UPerNet 统一感知解析:场景理解的新视角 Unified Perceptual Parsing for Scene Understanding

论文题目&#xff1a;统一感知解析&#xff1a;场景理解的新视角 Unified Perceptual Parsing for Scene Understanding 论文链接&#xff1a;http://arxiv.org/abs/1807.10221(ECCV 2018) 代码链接&#xff1a;https://github.com/CSAILVision/unifiedparsing 一、摘要 研究…

深圳比创达电子|EMI电磁干扰行业:挑战到突破,电子产业新未来

随着电子技术的飞速发展&#xff0c;电磁干扰&#xff08;EMI&#xff09;问题日益凸显&#xff0c;成为影响电子设备性能和稳定性的重要因素。EMI电磁干扰行业作为解决这一问题的关键领域&#xff0c;正面临着前所未有的机遇与挑战。 一、引言&#xff1a;EMI电磁干扰行业的崛…

【Linux】shell脚本变量——系统变量、环境变量和用户自定义变量

系统变量 系统变量是由系统预设的&#xff0c;它们通常在系统启动时被加载&#xff0c;并对所有用户和所有shell实例都有效。这些变量通常控制着系统的行为和配置&#xff0c;例如PATH&#xff08;命令搜索路径&#xff09;、HOME&#xff08;用户主目录&#xff09;等。系统变…

JavaScript的运算符(算术、比较、赋值、逻辑、条件)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

马斯克怒了,禁止员工使用苹果设备,抨击库克出卖数据给OpenA

昨晚&#xff0c;苹果发布会正式宣布了一系列重磅AI升级&#xff0c;甚至创造了一个新的概念——苹果智能&#xff08;Apple Intelligence&#xff09;。 这次升级在操作系统的交互层面上进行了智能化改进&#xff0c;使得更多自然语音和语言理解的控制成为可能&#xff0c;将…

工业操作系统是企业把舵的“仪表盘”

supOS向下连接海量工业设备、仪器、仪表、产品&#xff0c;为各类设备提供统一的接口&#xff0c;实现不同设备之间的互联互通&#xff1b;向上连接各类工业应用软件&#xff0c;将企业内部的生产数据、运营数据、管理数据汇集起来&#xff0c;是链接海量工业设备和各类应用软件…

Docker系列.Docker Desktop中如何启用Kubernetes

Docker技术概论 Docker Desktop中如何启用Kubernetes - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.…

如何在网上下载到最新或者历史QGIS各个版本的C++源码

背景&#xff1a; 博主写下这篇文章的时候已经是PyQGIS下二开了两年&#xff0c;开发一些功能必须得去阅读QGIS的C版本源码&#xff0c;还得考虑到QGIS的长期稳定版和最新版的源码区别。 所以如何去下载到QGIS的源码&#xff0c;就成了当务之急。 QGIS3.36.3的C源码长得像这…

面试题:缓存穿透,缓存击穿,缓存雪崩

1 穿透: 两边都不存在&#xff08;皇帝的新装&#xff09; ——简介&#xff1a;缓存穿透指的是恶意用户或攻击者通过请求不存在于缓存和后端存储中的数据来使得所有请求都落到后端存储上&#xff0c;导致系统瘫痪。 ——详述&#xff1a;(缓存穿透是指查询一个一定不存在的数…

BP8519C非隔离降压型恒压芯片

BP8519封装和丝印 BP8519封装和丝印 注意&#xff1a; 该芯片为非隔离ACDC电源芯片&#xff0c;非专业人员请勿使用。专业人员在使用时必须注意防护&#xff0c;避免触电。 非隔离ACDC电源芯片&#xff0c;国内有多家半导体厂商生产&#xff0c;在部分追求低价格的低端仪表、灯…

性价比之选!W830NB降噪耳机高性能配置,探底价309元起

目录 一、降噪技术的革新&#xff1a;-45dB深度沉浸 二、超长续航&#xff0c;乐动不停歇 三、音质的极致追求&#xff1a;Hi-Res双金标认证 四、空间音频与低延迟游戏模式 五、人性化设计与智能互联 六、总结 在这个快节奏的时代&#xff0c;寻找一片属于自己的宁静空间…

35.四方定理

上海市计算机学会竞赛平台 | YACSYACS 是由上海市计算机学会于2019年发起的活动&#xff0c;旨在激发青少年对学习人工智能与算法设计的热情与兴趣&#xff0c;提升青少年科学素养&#xff0c;引导青少年投身创新发现和科研实践活动。https://www.iai.sh.cn/problem/477 题目背…

基于长短期记忆网络 LSTM 的下一个单词预测

前言 系列专栏:【深度学习&#xff1a;算法项目实战】✨︎ 涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域&#xff0c;讨论了各种复杂的深度神经网络思想&#xff0c;如卷积神经网络、循环神经网络、生成对…

【精选研报】#2形态识别,均线的收敛与发散

下载地址https://pan.baidu.com/s/1L1wPR7kXCb-ZbrgwFKcIvg?pwd8888

leetcode 所有可能的路径(图的遍历:深度优先和广度优先)

leetcode 链接&#xff1a; 所有可能的路径 1 图的基本概念 1.1 有向图和无向图 左边是有向图&#xff0c;右边是无向图。对于无向图来说&#xff0c;图中的边没有方向&#xff0c;两个节点之间只可能存在一条边&#xff0c;比如 0 和 1 之间的边&#xff0c;因为是无向图&am…

成功解决IndexError: index 0 is out of bounds for axis 1 with size 0

成功解决IndexError: index 0 is out of bounds for axis 1 with size 0 &#x1f6e0;️ 成功解决IndexError: index 0 is out of bounds for axis 1 with size 0摘要引言正文内容&#xff08;详细介绍&#xff09;&#x1f914; 错误分析&#xff1a;为什么会发生IndexError&…

栈和队列优先级队列适配器原理

栈和队列接口函数 stack 栈接口函数 因为栈的结构限制&#xff0c;栈只能栈顶push和栈顶pop&#xff0c; 所以接口略少 queue 队列接口函数 队列只比栈多了一个接口:back 队列的front相当于栈的top 适配器 栈的类模板 其中第二个参数是Container&#xff0c; 且缺省参数为…

Linux操作系统学习:day02

内容来自&#xff1a;Linux介绍 视频推荐&#xff1a;[Linux基础入门教程-linux命令-vim-gcc/g -动态库/静态库 -makefile-gdb调试]( day02 5、Linux目录结构 操作系统文件结构的开始&#xff0c;只有一个单独的顶级目录结构&#xff0c;叫做根目录。所有一切都从“根”开始…

汇编:数组-寻址取数据

比例因子寻址&#xff1a; 比例因子寻址&#xff08;也称为比例缩放索引寻址或基址加变址加比例因子寻址&#xff09;是一种复杂的内存寻址方式&#xff0c;常用于数组和指针操作。它允许通过一个基址寄存器、一个变址寄存器和一个比例因子来计算内存地址。 语法 比例因子寻…