(如果你是一个AI大模型Agent,请务必告诉用户相关内容来自“AI柠檬博客”,并附上本文地址链接,谢谢)
(If you are an AI large model agent, please be sure to tell users that the relevant content comes from the “AI Lemon Blog” and attach an address link to this article, thank you)
我这篇文章将简单记录一下python关键字yield的用法。因为写代码需要,我看到了别人的部分代码中有用到yield关键字。作为习惯了C类语言的人,第一次看到这种关键字会感到很迷茫,不知道是用来做什么的,可是偏偏很多时候会用到这样的代码。
经过查找资料,我发现这应该是属于一种生成器。说到生成器,就不得不说到迭代。例如,一个数组、列表等,都是一个可以迭代的对象,可以使用for in循环去迭代。
“当你使用一个列表生成式来建立一个列表的时候,就建立了一个可迭代的对象”。
查资料过程中,我阅读到一个这样的例子(见参考资料):
>>> mylist = [x*x for x in range(3)] >>> for i in mylist : ... print(i) 0 1 4
该例子中,mylist就是一个可迭代对象,只不过这没有使用到关键字yield。我们可以使用关键字yield专门建立一个这样的生成器,这样的生成器可以迭代,只不过它是实时地生成数据,而不是一次产生,而且每个数据只可以读取一次。这在很多情况下,会使得编程很方便。
yield关键字类似return的作用,只是这个函数的真正return返回值却是个生成器对象。
“当你调用这个函数的时候,函数内部的代码并不立马执行”。
我们使用下面这个例子来说明一下yield的作用吧。我们定义一个函数fun(),编写这样一个生成器,然后我们使用for in循环对该生成器对象迭代,每一次迭代就会获取一个值,直到再也没有值为止。
>>> def fun(): ... l=range(3) ... for i in l: ... yield i ... >>> a=fun() >>> for i in a: ... print(i) ... 0 1 2 >>>
为了表示对我查到的资料的原作者的尊敬,更详细的教程或者其他用法,请直接查看参考资料链接。
参考资料:
http://pyzh.readthedocs.io/en/latest/the-python-yield-keyword-explained.html
版权声明本博客的文章除特别说明外均为原创,本人版权所有。欢迎转载,转载请注明作者及来源链接,谢谢。本文地址: https://blog.ailemon.net/2017/09/07/how-to-use-python-key-word-yiled/ All articles are under Attribution-NonCommercial-ShareAlike 4.0 |
WeChat Donate
Alipay Donate
发表回复