Python关键字yield用法

我这篇文章将简单记录一下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

 

打赏作者
很喜欢这篇文章,赞赏一下作者,以激励其创作出更多好文!

您的支持将鼓励我们继续创作!

[微信] 扫描二维码打赏

[支付宝] 扫描二维码打赏

分享到社交网络:

“Python关键字yield用法”的2个回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注