http://blog.csdn.net/tossgoer/archive/2010/08/18/5822303.aspx

忽然得知Python有个叫yield的关键字,好奇之下去查了查,花了点时间基本弄明白了,故写在此备忘,顺便充充字数。

yield关键字用来定义生成器(Generator),其具体功能是可以当return使用,从函数里返回一个值,不同之处是用yield返回之后,可以让函数从上回yield返回的地点继续执行。也就是说,yield返回函数,交给调用者一个返回值,然后再“瞬移”回去,让函数继续运行, 直到吓一跳yield语句再返回一个新的值。

使用yield返回后,调用者实际得到的是一个迭代器对象,迭代器的值就是返回值,而调用该迭代器的next()方法会导致该函数恢复yield语句的执行环境继续往下跑,直到遇到下一个yield为止,如果遇不到yield,就会抛出异常表示迭代结束。

看一个例子:

>>> def test_yield():
...     yield 1
...     yield 2
...     yield (1,2)
...
>>> a = test_yield()
>>> a.next()
1
>>> a.next()
2
>>> a.next()
(1, 2)
>>> a.next()
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
StopIteration

每次调用a.next(),都会得到下一个yield返回的值,最后一次调用会抛出StopIteration结束异常。

暂时没想到这个东西有什么用,也许就是可以省一些代码。

一个有趣的例子,用来生成一个序列的全排列:

def

perm(

items, n=None

)

:

if

n is

None

:

n = len

(

items)

for

i in

range

(

len

(

items)

)

:

v = items[

i:i+1]

if

n == 1:

yield

v

else

:

rest = items[

:i]

+ items[

i+1:]

for

p in

perm(

rest, n-1)

:

yield

v + p

的确是方便一些,不过我还是觉得都放到一个数组里更直观...

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/tossgoer/archive/2010/08/18/5822303.aspx

Python的yield关键字相关推荐

  1. [翻译]Python中yield的解释

    问题: Python中yield关键字的作用是什么?它做了什么? 例如,我想理解以下代码 def node._get_child_candidates(self, distance, min_dist ...

  2. “ yield”关键字有什么作用?

    Python中yield关键字的用途是什么? 它有什么作用? 例如,我试图理解这段代码1 : def _get_child_candidates(self, distance, min_dist, m ...

  3. python function if yield_Python中的yield关键字

    Python中的yield关键字 这是stackoverflow上一个关于yield关键字的问题以及它被推荐次数最高的一个答案 问题: Python中的yield关键字是什么?它是用来做什么的? 例如 ...

  4. python里的关键字有哪些_Python中的yield关键字做了什么?

    Python中的yield关键字做了什么 要理解yield做了什么,就必须明白生成器(generators)为何物,而在明白生成器之前还要知道迭代器(iterables). 1.迭代器 当我们创建一个 ...

  5. Python 生成器 和 yield 关键字

    Python 中 yield 的作用:http://youchen.me/2017/02/10/Python-What-does-yield-do/# Python 生成器详解:http://codi ...

  6. Python生成器实现及yield关键字

    Python生成器实现及yield关键字 我在另一篇文章中介绍了Python迭代器,https://blog.csdn.net/weixin_43790276/article/details/9034 ...

  7. python lambda表达式及用法_Python:lambda表达式和yield关键字理解与使用讲解

    一.lambda表达式 1.1.lambda表达式理解 lambda的主体是一个表达式,而不是一个代码块,仅仅能在lambda表达式中封装有限的逻辑进去.如果要通俗的理解lambda表达式,可以结合C ...

  8. Python 中的黑暗角落(一):理解 yield 关键字

    Python 是非常灵活的语言,其中 yield 关键字是普遍容易困惑的概念. 此篇将介绍 yield 关键字,及其相关的概念. 迭代.可迭代.迭代器 迭代(iteration)与可迭代(iterab ...

  9. Python中的yield关键字及表达式、生成器、生成器迭代器、生成器表达式详解

    文章目录 1. yield关键字及表达式.生成器.生成器迭代器.生成器表达式 1.1 yield关键字及表达式(yield expression) 1.1.1 yield关键字 1.1.2 yield ...

最新文章

  1. sml完整形式_教资会的完整形式是什么?
  2. 大数据之Yarn——Capacity调度器概念以及配置
  3. python的userlist_Python Collections.UserList用法及代码示例
  4. 获取hdfs_收好!Hadoop-HDFS读写原理的超详细教程
  5. 腾讯第一大股东 Prosus 18亿美元收购 StackOverFlow
  6. 操作系统概念学习笔记 10 CPU调度
  7. 43次课(限定某个目录禁止解析php、限制user_agent、 php相关配置)
  8. IAR下STM32工程建立基本步骤
  9. Java 编程思想 Chapter_14 类型信息
  10. 2021年中国商品期货交易规模分析:交易量达71.71亿手,同比增长21.15%[图]
  11. 国产Linux系统再添一员猛将,颜值完全不输苹果!
  12. 罗德里格斯公式证明(Games101)
  13. 在Windows10环境下安装RabbitMAQ、Erlang的坑
  14. 机试算法题-敲击计数器
  15. U8 存货期初余额 货位
  16. 工业企业危险源管理和应急管理解决方案
  17. 管理 - 精益是什么
  18. [树莓派]PICO基础使用_微雪OLED显示
  19. echart简单介绍
  20. 如何清洗和保养工业相机

热门文章

  1. 购买阿里云遇到Permission denied的问题
  2. 使用随机数以及扩容表进行join代码
  3. yum 安装服务出现报错收集
  4. Eclipse OSGi调试过程
  5. 人工智能深度学习框架MXNet实战:深度神经网络的交通标志识别训练
  6. SVN不是配置管理系统
  7. 警告:failed to load the sqljdbc_auth.dll cause no sqljdbc_auth in java.library.path
  8. word 另存为xml后,读取xml的图片数据
  9. MATLAB调用C++程序
  10. C++、C#写的WebService相互调用