首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python中的yield的简单练习

python中的yield的简单练习

作者头像
the5fire
发布2019-02-28 16:10:07
8070
发布2019-02-28 16:10:07
举报

前一段时间对python的实践并不太多,主要做一些页面的效果,还有关于pdf的打印。前面的工作算是告一段落了,后面需要拿起来python干活了。有空就写写代码实践一下。

关于这个yield函数(确切的说是表达式),认真的看了网上几篇关于yield的文章,自己照着研究下代码,基本上能理解怎么来用,但是yield的执行原理,还有待研究。

先说我对这个表达式的理解,然后再给出几个例子,细致的说明一下。 如果一个函数中存在着yield表达式,那么这个函数必将不是一个普通的函数(可能是文艺函数或者是2……你懂的),它就变成了生成器 (这个词最直观的概念就是生成某一事物的机器,也就是自动生成某一事物)。个人认为yield在函数中的作用就是保持函数当前的状态,并返回一个值。貌似说的不是太清楚,因为我理解的也不是很清楚,那么来看几个例子。

1、yield1.py

.. code:: python

def test():
    print 'the5fire'
    yield 'the'

建议你在python shell中实验这段代码,执行函数test之后,终端会输出:,这个提示很明显:这个test函数已经变为一个生成器对象了,在内存×××处。

是不是有点疑惑,别急,再来看第二个例子

2、yield2.py

.. code:: python

def test():
    print 'the5fire'
    yield 'the'

然后你在终端上输入:

.. code:: python

t = test()
t.next()

是不是输出了: the5fire the

看到上面的那个next()是不是觉得眼熟呢,如果你使用过迭代器的话,你会知道,这个next的作用就是取下一个值。 关于迭代器,最常用的应该就是 for...in 这个结构了,有兴趣的不妨自己去研究一番,相信你会有所收获。 再来看第三个例子,是一个Fibonacci函数 3、yield3.py


.. code:: python

def fib(max):
  a,b = 0,1
  while a < max:
    yield a
    a, b = b, a + b

for n in fib(1000):
  print n

这样执行一下就得到了斐波纳契的数列。自己在fib函数中的yield上下写上print随便输出点东西,就会发现,其实在函数执行到yield a这句话的时候像是被暂停了,转而执行了外面for...in循环里面的东西。

看完上面的三个例子是不是对yield的使用清楚了一些呢,如果还是不清楚,那就在多练习几遍。 关于这个表达式的使用更多的内容可以参考这里: http://blog.donews.com/limodou/archive/2006/09/04/1028747.aspx http://www.builder.com.cn/2007/0720/427920.shtml

PS:又翻看了一下《python基础教程》,yield在双层循环中用的也很多,如:

.. code:: python

def getItem(aItems):
  for sublist in aItems:
    for item in sublist:
      yield item

aItems = [[1,2],[3,4],[5]]
for item in getItem(aItems):
  print item

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2011-12-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、yield1.py
  • 2、yield2.py
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档