什么是python生成器,python生成式与生成器

  什么是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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: