本文将讨论清华大学毕业证书高清版生成器和迭代器的一些研究,并详细解释清华大学学生证书生成器。如果你能解决你现在面临的问题,别忘了关注这个网站,现在就开始吧!
一、php创建和使用生成器
1、概述
生成器是PHP5.5引入的新特性,但是测很少有人使用它,事实上,这是一个非常有用的功能。
生成器与迭代器有点相似,但与标准相似PHP迭代器不同,PHP生成器不需要类实现Iterator接口,从而减轻了类别的成本和负担。生成器每次根据需要计算并产生需要迭代的值,这对应用程序的性能有很大的影响:想象一下,如果标准的话PHP迭代器经常在内存中进行迭代操作,需要提前计算数据集,性能低下;如果需要以特定的方式计算大量数据,如操作Excel对性能的影响更大。生成器每次根据需要计算并产生需要迭代的值,这对应用程序的性能有很大的影响:想象一下,如果标准的话PHP迭代器经常在内存中进行迭代操作,需要提前计算数据集,性能低下;如果需要以特定的方式计算大量数据,如操作Excel表数据对性能有更大的影响。此时,我们可以使用生成器,即时计算输出后续值,而不占用宝贵的内存空间。
2.创建生成器
创建生成器的方法很简单,因为生成器是PHP函数只需在函数中使用一次或多次yield关键字。与普通的PHP不同的函数是,生成器从不返回值,只产出值。以下是一个简单的生成器实现:
functiongetLaravelAcademy{yield'';yield'xxx';yield'xxx';}
很简单吧!调用此生成器函数时,PHP会回到一个属Generator可以使用类对象foreach函数迭代,每次迭代,PHP会要求Generator实例计算并提供下一个迭代值。每次输出一个值后,生成器的内部状态就会停止;当向生成器要求下一个值时,内部状态就会恢复。生成器的内部状态将在停顿和恢复之间切换,生成器的内部状态将在停顿和恢复之间切换return语句为止。我们可以使用以下代码调用并迭代上述定义的生成器:
foreach(getLaravelAcademyas$yieldedValue){
echo$yieldedValue,PHP_EOL;
3.使用生成器
让我们实现一个简单的函数来生成一个范围内的值,以解释生成器是如何节省内存的。首先,我们通过迭代器实现:
functionmakeRange($length){$dataSet=[];for($i=0;$i<$length;$i ){$dataSet[]=$i;}return$dataSet;}$customRange=makeRange;foreach($customRangeas$i){echo$i.PHP_EOL;}
此时执行会报错,提示超出单个PHP过程内存限制(为100万个数字提供内存空间):
下面我们来方案,使用生成器如下:
functionmakeRange($length){for($i=0;$i<$length;$i ){yield$i;}}foreach(makeRangeas$i){echo$i.PHP_EOL;}
再次执行可无压力打印结果,因为生成器每次只需要为一个整数分配内存。
此外,常用的案例是使用生成器迭代流资源(文件、音频等)。假设我们想迭代一个大小4GB的CSV虚拟私有服务器(VPS)只允许PHP使用1GB内存,因此不能将整个文件加载到内存中,以下代码显示了如何使用生成器完成此操作:
functiongetRows($file){$handle=fopen($file,'rb');if($handle==FALSE) hrownewException;}while(feof($handle)===FALSE){yieldfgetcsv($handle);}fclose($handle);}foreach($getRows($file)as$row) rint_r($row);}
以上示例一次只能为CSV文件中的一行分配内存,而不会把整个4GB的CSV内存中读取所有文件。
4、总结
生成器是功能多样性和简单性之间的妥协。生成器只是一个向前的迭代器,这意味着生成器不能在数据集中执行后退、快进或搜索操作,只能计算和输出下一个值。
4、总结
生成器是功能多样性和简单性之间的妥协方案。生成器只是一个向前的迭代器,这意味着生成器不能用于数据集中的后退、快进或搜索操作,只能让生成器计算和输出下一个值。生成器最适合迭代大数据集或数列,因为它占用的系统内存最少。生成器还可以完成迭代器可以完成的简单任务,使用的代码更少。
二、
迭代器和生成器的区别
迭代器与生成器的区别:
(1)生成器:
生成器本质上是一个函数,它记住了上次返回时在函数体中的位置。
调用生成器函数的第二次(或n次),跳转到函数上次挂起的位置。
并记录了程序执行的上下文。
生成器不仅记住了它的数据状态,还记住了程序执行的位置。
(2)迭代器
迭代器是一种支持next操作对象。当执行时,它包含一组元素next操作时,返回其中一个元素。
所有元素返回后执行next报异常—StopIteration
生成器一定是可迭代的,也一定是迭代器对象
(3)区别:
①生成器是生成元素,迭代器是访问集合元素的一种方式
②迭代输出生成器的内容
③迭代器是一种支持next操作的对象
④迭代器(iterator):其中iterator对象表示数据流,可以视为有序序列,但我们不能提前知道序列的长度,只能通过nex函数实现下一个需要计算的数据。可视为生成器的子集。
三、常用的迭代器函数是什么?常用的迭代器函数有:const_iteratorbeginconst;iteratorbegin;//返回string的起始位置const_iteratorendconst;iteratorend;//返回string最后一个字符后面的位置const_iteratorrbeginconst;iteratorrbegin;//返回string最后一个字符的位置const_iteratorrendconst;iteratorrend;//返回string第一个字符位置的前面rbegin和rend用于从后到前的迭代访问,设置迭代器string::reverse_iterator,string::const_reverse_iterator通过定义实现字符串流处理:ostringstream和istringstream变量实现,#includesstream头文件中:stringinput(hello,thisisatest);istringstreamis(input);strings1,s2,s3,s4;iss1s2s3s4;//s1hello,this,s2is,s3a,s4testostringstreamos;oss1s2s3s四、以上是对的C string简要介绍类以上是对清华大学毕业证书高清版生成器和迭代器的分析。感谢您花时间阅读本网站的内容。别忘了在这个网站上找到更多关于清华大学学生证书生成器的信息。
毕业证样本网创作《清华大学毕业证高清版 生成器和迭代器,清华大学器》发布不易,请尊重!
转转请注明出处:https://www.czyyhgd.com/446844.html