Python的yield关键字
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关键字相关推荐
- [翻译]Python中yield的解释
问题: Python中yield关键字的作用是什么?它做了什么? 例如,我想理解以下代码 def node._get_child_candidates(self, distance, min_dist ...
- “ yield”关键字有什么作用?
Python中yield关键字的用途是什么? 它有什么作用? 例如,我试图理解这段代码1 : def _get_child_candidates(self, distance, min_dist, m ...
- python function if yield_Python中的yield关键字
Python中的yield关键字 这是stackoverflow上一个关于yield关键字的问题以及它被推荐次数最高的一个答案 问题: Python中的yield关键字是什么?它是用来做什么的? 例如 ...
- python里的关键字有哪些_Python中的yield关键字做了什么?
Python中的yield关键字做了什么 要理解yield做了什么,就必须明白生成器(generators)为何物,而在明白生成器之前还要知道迭代器(iterables). 1.迭代器 当我们创建一个 ...
- Python 生成器 和 yield 关键字
Python 中 yield 的作用:http://youchen.me/2017/02/10/Python-What-does-yield-do/# Python 生成器详解:http://codi ...
- Python生成器实现及yield关键字
Python生成器实现及yield关键字 我在另一篇文章中介绍了Python迭代器,https://blog.csdn.net/weixin_43790276/article/details/9034 ...
- python lambda表达式及用法_Python:lambda表达式和yield关键字理解与使用讲解
一.lambda表达式 1.1.lambda表达式理解 lambda的主体是一个表达式,而不是一个代码块,仅仅能在lambda表达式中封装有限的逻辑进去.如果要通俗的理解lambda表达式,可以结合C ...
- Python 中的黑暗角落(一):理解 yield 关键字
Python 是非常灵活的语言,其中 yield 关键字是普遍容易困惑的概念. 此篇将介绍 yield 关键字,及其相关的概念. 迭代.可迭代.迭代器 迭代(iteration)与可迭代(iterab ...
- Python中的yield关键字及表达式、生成器、生成器迭代器、生成器表达式详解
文章目录 1. yield关键字及表达式.生成器.生成器迭代器.生成器表达式 1.1 yield关键字及表达式(yield expression) 1.1.1 yield关键字 1.1.2 yield ...
最新文章
- sml完整形式_教资会的完整形式是什么?
- 大数据之Yarn——Capacity调度器概念以及配置
- python的userlist_Python Collections.UserList用法及代码示例
- 获取hdfs_收好!Hadoop-HDFS读写原理的超详细教程
- 腾讯第一大股东 Prosus 18亿美元收购 StackOverFlow
- 操作系统概念学习笔记 10 CPU调度
- 43次课(限定某个目录禁止解析php、限制user_agent、 php相关配置)
- IAR下STM32工程建立基本步骤
- Java 编程思想 Chapter_14 类型信息
- 2021年中国商品期货交易规模分析:交易量达71.71亿手,同比增长21.15%[图]
- 国产Linux系统再添一员猛将,颜值完全不输苹果!
- 罗德里格斯公式证明(Games101)
- 在Windows10环境下安装RabbitMAQ、Erlang的坑
- 机试算法题-敲击计数器
- U8 存货期初余额 货位
- 工业企业危险源管理和应急管理解决方案
- 管理 - 精益是什么
- [树莓派]PICO基础使用_微雪OLED显示
- echart简单介绍
- 如何清洗和保养工业相机
热门文章
- 购买阿里云遇到Permission denied的问题
- 使用随机数以及扩容表进行join代码
- yum 安装服务出现报错收集
- Eclipse OSGi调试过程
- 人工智能深度学习框架MXNet实战:深度神经网络的交通标志识别训练
- SVN不是配置管理系统
- 警告:failed to load the sqljdbc_auth.dll cause no sqljdbc_auth in java.library.path
- word 另存为xml后,读取xml的图片数据
- MATLAB调用C++程序
- C++、C#写的WebService相互调用