我这篇文章将简单记录一下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 |
“Python关键字yield用法”上的2条回复
yiled…
呀!我突然发现我手误打错了。。/捂脸