详细内容

阅读别人的python源码时碰到了这个yield这个关键字,各种搜索终于搞懂了,在此做一下总结:

通常的for…in…循环中,in后面是一个数组,这个数组就是一个可迭代对象,类似的还有链表,字符串,文件。它可以是mylist= [1, 2, 3],也可以是mylist = [x*x for x in range(3)]。 它的缺陷是所有数据都在内存中,如果有海量数据的话将会非常耗内存。(推荐学习:Python视频教程)

生成器是可以迭代的,但只可以读取它一次。因为用的时候才生成。比如 mygenerator = (x*x for x in range(3)),注意这里用到了(),它就不是数组,而上面的例子是[]。

我理解的生成器(generator)能够迭代的关键是它有一个next()方法,工作原理就是通过重复调用next()方法,直到捕获一个异常。可以用上面的mygenerator测试。

带有yield的函数不再是一个普通函数,而是一个生成器generator,可用于迭代,工作原理同上。

yield一个类似return的关键字,迭代一次遇到yield时就返回yield后面的值。重点是:下一次迭代时,从上一次迭代遇到的yield后面的代码开始执行。

简要理解:yield就是return返回一个值,并且记住这个返回的位置,下次迭代就从这个位置后开始。

带有yield的函数不仅仅只用于for循环中,而且可用于某个函数的参数,只要这个函数的参数允许迭代参数。比如array.extend函数,它的原型是array.extend(iterable)。

send(msg)与next()的区别在于send可以传递参数给yield表达式,这时传递的参数会作为yield表达式的值,而yield的参数是返回给调用者的值。——换句话说,就是send可以强行修改上一个yield表达式值。比如函数中有一个yield赋值,a

= yield 5,第一次迭代到这里会返回5,a还没有赋值。第二次迭代时,使用.send(10),那么,就是强行修改a表达式的值为10,本来是None的,那么a=10

send(msg)与next()都有返回值,它们的返回值是当前迭代遇到yield时,yield后面表达式的值,其实就是当前迭代中yield后面的参数。

第一次调用时必须先next()或send(None),否则会报错,send后之所以为None是因为这时候没有上一个yield(根据第8条)。可以认为,next()等同于send(None)。

更多Python相关技术文章,请访问Python教程栏目进行学习!

python中的yield是什么意思_python yield什么意思,_Python_ 少侠科技相关推荐

  1. python中with open写csv文件_Python中的CSV文件使用with语句的方式详解

    是否可以直接使用with语句与CSV文件?能够做这样的事情似乎很自然: import csv with csv.reader(open("myfile.csv")) as read ...

  2. python中的df是什么意思_python df遍历的N种方式

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. for-in 迭代循环首先介绍Python中最常用的for-in循环遍历的方式.for-in循环结 ...

  3. python中的逻辑量有什么_python小白入门须知的9个基础知识丨纯干货

    注释 单行注释:# #注释内容 print('123') #123 print('abc') #abc print("abc") #abc 多行注释:''' 或 "&qu ...

  4. python中声明变量注意要项_Python之变量、常量以及注释

    Python之变量.常量以及注释 一.什么是变量 变量,是用于在内存中存放程序数据的容器,怎么理解呢? 计算机的最核心的功能就是"计算",计算需要数据源,数据源存在在内存里,比如我 ...

  5. python中不可迭代对象有哪些_python可迭代对象

    本身实现了迭代方法的对象称之为可迭代对象,可迭代对象特点: 支持每次返回自己所包含的一个成员的对象: 对象实现了 __iter__ 方法: 所有数据结构都是可迭代对象: for 循环要求对象必须是一个 ...

  6. python中def fun 定义函数列表_python函数

    # -*- coding:utf-8 -*- #yys #python 3.7.2 # 1.定义函数.调用函数 # 函数:组织好的.可重复使用的.用户实现单一或者关联功能的代码段. # 函数能够提高应 ...

  7. python中str的index什么意思_python中index的用法是什么

    index() 一般用处是在序列中检索参数并返回第一次出现的索引,没找到就会报错,比如:>>> t=tuple('Allen') >>> t ('A', 'l', ...

  8. python中gil锁和线程锁_Python线程——GIL锁、线程锁(互斥锁)、递归锁(RLock)...

    GIL锁 ​ 计算机有4核,代表着同一时间,可以干4个任务.如果单核cpu的话,我启动10个线程,我看上去也是并发的,因为是执行了上下文的切换,让看上去是并发的.但是单核永远肯定时串行的,它肯定是串行 ...

  9. python中函数包括标准库函数吗_Python语言和标准库(第二章:函数)

    a-如何创建函数. b-给出一些指导原则,帮助思考如何创建和组织程序以使用函数. c-如何编写函数,使随后可以询问它们的工作方式和实现的功能. 2.1将程序放在单独的文件里 为了更加方便,从现在开始, ...

  10. python中int表示的数据类型是_python中的基本数据类型之 int bool str

    一.基本数据类型 1. int  ==>  整数.主要用来进行数学运算. 2.str  ==>  字符串.可以保存少量的数据,并进行相应的操作. 3.bool  =>  布尔值.判断 ...

最新文章

  1. mysql的语句分类,查询、子查询及连接查询
  2. PHP (20140519)
  3. 第二天 PYTHON 基本数据类型 - 数字 - 字符串
  4. Js实现类似PHP中的in_array方法
  5. [网络流24题]圆桌问题
  6. Too many open files的四种解决办法
  7. Xcode4.4 import header 的问题解决方法
  8. 可重启的活动目录域服务
  9. mybatis批量写入及批量更新
  10. python是一种跨平台开源免费的高级动态编程_Python是一种跨平台、开源、免费的高级动态编程语言。...
  11. 19 个接私活平台汇总升级版,你有技术就有钱
  12. php网站后台密码忘记,phpweb忘记后台密码
  13. MVC项目功能之加入购物车,清空购物车
  14. mysql报08S01的错误- SQL Error: 0, SQLState: 08S01 偶发
  15. tensorflow应用系列3:使用tensorflow完成多项式回归
  16. 关于DM8168平台扩展PCIE网卡的问题
  17. HTML制作个人名片
  18. shineblink NEO-6M GPS模块获取经纬度/海拔/时间详解
  19. C++中标准库 输出 puts()函数
  20. 【数学建模】灰色关联(Matlab代码实现)

热门文章

  1. javascript核心(二)
  2. notable是一个简洁易用的在pc端编写markdown笔记的工具
  3. ner 评估指标_2019-03 NER命令实体识别归纳
  4. 支付宝支付加盟代理 选择采宝支付9大好处
  5. 2021蚂蚁链开发者大会报名中
  6. Core Journal Ranking 2020 期刊 排名 列表
  7. 【每日早报】2019/08/05
  8. 深度学习-推荐系统 研读第一章(作者:王喆)
  9. 智能水杯设计方案_智能水杯方案
  10. 成功解决使用node时,启动js文件抛出错误 events.js:377 throw er; // Unhandled ‘error‘ event ^Error: listen EA