Python yield 关键词,
要理解yield的作用,你必须理解生成器是什么。在理解生成器之前,必须先理解迭代器。
1.迭代器
当您创建一个列表时,你可以逐个读取它的项。逐项读取其项称为迭代:
640.webp
mylist是一个可迭代的对象。当你使用列表解析式时,你创建了一个列表,因此也是一个迭代器:
640.webp
所有你可以用"for... in ...."都是迭代器,包括列表、字符串、文件…等等。
这些迭代器非常方便,因为你可以随心所欲地读取它们,但是你将所有的值都存储在内存中,当你有很多值时,这就非常浪费内存了。
为了解决这样的问题,Python有了生成器的概念。
2.生成器
生成器是迭代器,这种迭代器只能迭代一次。生成器不会将所有值都存储在内存中,它们会动态生成这些值:
640.webp
它和列表解析式是类似的,只是用()代替了[]。但是,你不能在mygenerator中对i执行第二次,因为生成器只能使用一次:它print(0),然后忘记它,print(1),最后是4。
3.Yield
yield是一个与return类似的关键字,只是函数将返回一个生成器。
认真看完下面这个例子,你应该能完全明白。
640.webp
函数将返回一组只需要读取一次的值。如果你能将这个特性理解清楚,并将其应用到你的代码中,可能可以极大地提高性能,下次我们将介绍在什么时候该用它。
请注意示例中的第6行,在调用函数时,在函数体中编写的代码不会运行。函数只返回生成器对象,可别忘了这个重点。
最后,你的代码将从每次使用生成器时停止的地方继续。因此示例中第二次使用生成器的时候,我们的生成器已经完全没有值了。
所以最核心的逻辑如下:
for函数第一次调用从函数创建的生成器对象时,它将从头运行函数中的代码,直到达到yield,返回循环的第一个值。
随后的调用都将再次运行你在函数中编写的循环,并yield返回下一个值,直到没有要返回的值为止,就如我们上面的例子所示
相关推荐
-
python yield关键词案例测试
测试环境 win10 python 3.5 yield功能简介 简单来说,yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator 代码演示 例子1: 输出斐波那契數列前 N 个数 #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'shouke' def fab(max): n, a, b = 0, 0, 1 result =
-
浅析Python中yield关键词的作用与用法
前言 为了理解yield是什么,首先要明白生成器(generator)是什么,在讲生成器之前先说说迭代器(iterator),当创建一个列表(list)时,你可以逐个的读取每一项,这就叫做迭代(iteration). >>> mylist = [1, 2, 3] >>> for i in mylist : ... print(i) 1 2 3 mylist 是一个可迭代的对象.当使用一个列表生成式来建立一个列表的时候,就建立了一个可迭代的对象: >>>
-
Python yield 关键词,
1.迭代器 当您创建一个列表时,你可以逐个读取它的项.逐项读取其项称为迭代: mylist是一个可迭代的对象.当你使用列表解析式时,你创建了一个列表,因此也是一个迭代器: 所有你可以用"for... in ...."都是迭代器,包括列表.字符串.文件-等等. 这些迭代器非常方便,因为你可以随心所欲地读取它们,但是你将所有的值都存储在内存中,当你有很多值时,这就非常浪费内存了. 为了解决这样的问题,Python有了生成器的概念. 2.生成器 生成器是迭代器,这种迭代器只能迭代一次.生成器
-
Python yield 关键词,
要理解yield的作用,你必须理解生成器是什么.在理解生成器之前,必须先理解迭代器. 1.迭代器 当您创建一个列表时,你可以逐个读取它的项.逐项读取其项称为迭代: 640.webp mylist是一个可迭代的对象.当你使用列表解析式时,你创建了一个列表,因此也是一个迭代器: 640.webp 所有你可以用"for... in ...."都是迭代器,包括列表.字符串.文件-等等. 这些迭代器非常方便,因为你可以随心所欲地读取它们,但是你将所有的值都存储在内存中,当你有很多值时,这就非常浪
-
Python yield与实现方法代码分析
yield的功能类似于return,但是不同之处在于它返回的是生成器. 生成器 生成器是通过一个或多个yield表达式构成的函数,每一个生成器都是一个迭代器(但是迭代器不一定是生成器). 如果一个函数包含yield关键字,这个函数就会变为一个生成器. 生成器并不会一次返回所有结果,而是每次遇到yield关键字后返回相应结果,并保留函数当前的运行状态,等待下一次的调用. 由于生成器也是一个迭代器,那么它就应该支持next方法来获取下一个值. 基本操作 # 通过`yield`来创建生成器 def f
-
python实现关键词提取的示例讲解
新人小菜鸟又来写博客啦!!!没人表示不开心~~(>_<)~~ 今天我来弄一个简单的关键词提取的代码 文章内容关键词的提取分为三大步: (1) 分词 (2) 去停用词 (3) 关键词提取 分词方法有很多,我这里就选择常用的结巴jieba分词:去停用词,我用了一个停用词表. 具体代码如下: import jieba import jieba.analyse #第一步:分词,这里使用结巴分词全模式 text = '''新闻,也叫消息,是指报纸.电台.电视台.互联网经常使用的记录社会.传播信息.反映时
-
python yield和Generator函数用法详解
这篇文章主要介绍了python yield和Generator函数用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 首先我们从一个小程序导入,各定一个list,找出其中的素数,我们会这样写 import math def is_Prims(number): if number == 2: return True //除2以外的所有偶数都不是素数 elif number % 2 == 0: return False //如果一个数能被除1和
-
Python yield的用法实例分析
本文实例讲述了Python yield的用法.分享给大家供大家参考,具体如下: yield的英文单词意思是生产,刚接触Python的时候感到非常困惑,一直没弄明白yield的用法. 只是粗略的知道yield可以用来为一个函数返回值塞数据,比如下面的例子: def addlist(alist): for i in alist: yield i + 1 取出alist的每一项,然后把i + 1塞进去.然后通过调用取出每一项: alist = [1, 2, 3, 4] for x in addlist
-
基于python yield机制的异步操作同步化编程模型
本文总结下如何在编写python代码时对异步操作进行同步化模拟,从而提高代码的可读性和可扩展性. 游戏引擎一般都采用分布式框架,通过一定的策略来均衡服务器集群的资源负载,从而保证服务器运算的高并发性和CPU高利用率,最终提高游戏的性能和负载.由于引擎的逻辑层调用是非抢占式的,服务器之间都是通过异步调用来进行通讯,导致游戏逻辑无法同步执行,所以在代码层不得不人为地添加很多回调函数,使一个原本完整的功能碎片化地分布在各个回调函数中. 异步逻辑 以游戏中的副本评分逻辑为例,在副本结束时副本管理进程需要
-
Python yield 使用方法浅析
如何生成斐波那契數列 斐波那契(Fibonacci)數列是一个非常简单的递归数列,除第一个和第二个数外,任意一个数都可由前两个数相加得到.用计算机程序输出斐波那契數列的前 N 个数是一个非常简单的问题,许多初学者都可以轻易写出如下函数: 清单 1. 简单输出斐波那契數列前 N 个数 def fab(max): n, a, b = 0, 0, 1 while n < max: print b a, b = b, a + b n = n + 1 执行 fab(5),我们可以得到如下输出: >>
随机推荐
- SQLServer 2008中SQL增强之一:Values新用途
- jQuery中each()、find()和filter()等节点操作方法详解(推荐)
- 详解nodejs中exports和module.exports的区别
- java贪吃蛇游戏编写代码
- oracle删除主键查看主键约束及创建联合主键
- js实现交通灯效果
- 多浏览器兼容性比较好的复制到剪贴板的js代码
- 深入理解PHP类的自动载入机制
- 无间断滚动marquee的详细用法解析
- Go语言实现简单留言板的方法
- 使用CSS不用程序实现文字自动截断 用省略号代替
- 用SQL Server访问Sybase中的表的方法
- PHP使用xpath解析XML的方法详解
- jQuery仿京东商城楼梯式导航定位菜单
- 告诉大家什么是双通道?
- Thinkphp框架开发移动端接口(2)
- 详解Android 教你打造高效的图片加载框架
- php精度计算的问题解析
- Webpack 4如何动态切割JS注入文件名详解
- ES6 Iterator接口和for...of循环用法分析