什么是python生成器,python生成式与生成器
继续
上次给大家讲了PHP yield的用法,今天给大家讲一下yield from。
一定是PHP.net来这里的时候不喜欢这里。这篇文章必须给你一个彻底的解释。
三部曲
语法
函数func()
{
从$expression获得;
}
是的,和yield一样,这是一个生成器语法。$expression是必需的(yield可以为NULL),并且必须是可迭代对象。
快速开始
小例子1
函数yield_from_func()
{
(来自数组(1,2,3,4)的yield
}
foreach(yield _ from _ func()as $ value)
{
“echo”值为:“”。$价值。PHP _ EOL
}
运行输出
$ php。/test.php
值为:1
值为:2
值为:3
值为:4
通过上面的例子可以得出yield from可以遍历并逐个发送每个数组(或迭代器)。
小例子2
函数yield_func()
{
产量1;
产量2;
产量3;
}
函数yield_from_func2()
{
(yield from yield _ func());
}
$ gen=yield _ from _ func 2();
“echo”值为:“”。$gen-current()。PHP _ EOL
$ gen-next();
“echo”值为:“”。$gen-current()。PHP _ EOL
$ gen-next();
“echo”值为:“”。$gen-current()。PHP _ EOL
$ gen-next();
运行输出
$ php。/test.php
值为:1
值为:2
值为:3
在小例子2中,当生成器位于yield from的右侧时,调用next和current也可以将生成器中的元素一个一个地发送出去。
发现
接下来,让我们测试全部代码。Gitee PHP生成器yield演示,探索Yield的各种细节。
git克隆https://gitee.com/xupaul/PHP-generator-yield-Demo.git
纸上谈兵会觉得练功浅薄永远不会知道
奔跑
$ php。/yieldFromTest.php
什么是发电机?
//./yieldFromFunctions.php
函数yield_from_func1()
{
//屈服于;//分析错误:语法错误,意外的“;”
}
有一行代码,已经注释过了,语法静态检查过不了。
上图是生成器判断运行结果yield_from_func4()。有一个if判断它运行是否yield from,PHP还是判断它是一个生成器。
其实在这一点上,大家都很清楚发电机是不是静态判断的。
函数yield_from_func3()
{
“测试”的产量;
}
回声例如:5号。PHP _ EOL
$ gen=yield _ from _ func 3();
echo call yield _ from _ func 2 current 。PHP _ EOL
//$ re=$ gen-current();//致命错误:未捕获的错误:只能对数组和可遍历对象使用“yield from”
echo PHP _ EOL
运行结果:
第五名
yield_from_func4是PHP生成器?正确
调用yield_from_func2 current
虽然这个yield_from_func4被判断为生成器,但是一执行就会报错,所以yield from的右边一定是遍历对象。
示例8也不会正确运行。
当前、下一个和发送
在上面的截图中,例1和例2,你可以从和yield看到yield的电流,得到当前值,跳过next,send把值传入生成器。这些功能类似于半代的功能。
同样,一开始跳过current,直接调用send,会失去第一个yield的弹出值。
接收数据的收益
例如:6、7。见截图中例6 get re:打印出来$re为NULL,list($re1,$re2,$re3)也为NULL。
结论:yield from左侧不能接收任何值。在左边写赋值语句不会出错,但也没有意义。
那么send输入的值去了哪里呢?继续读。
筑巢产量
函数yield_func20()
{
$ arr=array();
回显“运行到功能”。__FUNCTION__。行:。__行_ _。PHP _ EOL
$arr[]=收益率2;
$ arr[]=yield key = value ;
$ arr[]=yield 7= cc ;
$arr[]=收益率5;
回显“运行到功能”。__FUNCTION__。行:。__行_ _。arr re:;
var _ export($ arr);
echo PHP _ EOL
}
示例:在9,10中,我们实现了,从生成器中获取值。同时通过yield_func20函数中的$arr变量dump,发现发送给生成器的值会通过yield from传递给内部生成器的yield赋值语句。
例如:在12和13中,发现yield from可以嵌套在多个层中。
产量的嵌套功能是一个非常重要的功能。在共同编程编码中,熟练使用嵌套可以减少函数指针和生成器的应用传输。
摘要
Yield from是一个强大且不可或缺的语法。如果只有产量,那就只有发电机了。在Yieldfrom中,有一根强大的“针”——穿过生成器,并根据调用栈将它们连接起来。该方法使用call_user_func(),调用生成器使用yield from。
好了,这就是yield from的用法探索,实战会放到后续文章里。
欢迎提问。如果有帮助,请关注并收藏。作者有新发现和干货,也会更新文章。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。