深入浅出理解yield
索引
转载部分内容来自:http://www.jianshu.com/p/d09778f4e055 [彻底理解yield]
http://blog.csdn.net/haskei/article/details/54908853 [深入理解yield]
简要
yield是生成器中的一个关键字,他的作用和返回差不多,但是又有很大的区别:
1.下一次迭代时,从上一次迭代遇到的yield后面的代码开始执行
2.简要理解:yield就是 return 返回一个值,并且记住这个返回的位置,下次迭代就从这个位置后开始。
3.第一次调用时必须先next()或send(None),否则会报错,send后之所以为None是因为这时候没有上一个yield。可以认为,next()等同于send(None)。
----next()和send(None)会是生成器函数执行一遍,然后到yield的地方停下,下一次使用next(),send(None)时,从这个地方开始
4.send(msg)与next()的区别在于send可以传递参数给yield表达式,这时传递的参数会作为yield表达式的值,而yield的参数是返回给调用者的值。
------猜测next()和send(None)会设置一个开始点
------比如函数中有一个yield赋值,a = yield 5,第一次迭代到这里会返回5,a还没有赋值。第二次迭代时,使用.send(10),那么,就是强行修改yield 5表达式的值为10,本来是5的,那么a=10
------猜测send(n)时 x = yield y 的值就是本次send的值,也就是x=n!
实践
1.初步理解
def yii(arr):
for i in arr:
yield i+1
arr = [1,2,3,4]
for n in yii(arr):
print(n)
显示结果:
2 3 4 5
2.次级理解
def shengcheng():
print('循环前')
for i in range(5):
print('第一步',i)
yield i
print('第二步:',i)
yield i
print('第三步',i)
yield i
s = shengcheng()
res = s.send(None)
print('sendNone结束\r\n')
#yield也会结束这个循环,所以得把range(n)的n设大一点5*3
for x in range(15):
res = next(s)
print('结束并return:', res,'\r\n')
显示结果如下:
D:\Lio\Python\PyInstall\python.exe D:/Servers/Python/dm04_test_send.py
Traceback (most recent call last):
File "D:/Servers/Python/dm04_test_send.py", line 17, in <module>
res = next(s)
StopIteration
循环前
第一步 0
sendNone结束
第二步: 0
结束并return: 0
第三步 0
结束并return: 0
第一步 1
结束并return: 1
第二步: 1
结束并return: 1
第三步 1
结束并return: 1
第一步 2
结束并return: 2
第二步: 2
结束并return: 2
第三步 2
结束并return: 2
第一步 3
结束并return: 3
......省略......
Process finished with exit code 1
循环与yield的图解


深入浅出理解yield的更多相关文章
- Python天天美味(25) - 深入理解yield
Python天天美味(25) - 深入理解yield - CoderZh - 博客园 Python天天美味(25) - 深入理解yield yield的英文单词意思是生产,刚接触Python的时候 ...
- 深入浅出理解c++虚函数
深入浅出理解c++虚函数 记得几个月前看过C++虚函数的问题,当时其实就看懂了,最近笔试中遇到了虚函数竟然不太确定,所以还是理解的不深刻,所以想通过这篇文章来巩固下. 装逼一刻: 最近,本人思想发 ...
- 深入理解yield(三):yield与基于Tornado的异步回调
转自:http://beginman.cn/python/2015/04/06/yield-via-Tornado/ 作者:BeginMan 版权声明:本文版权归作者所有,欢迎转载,但未经作者同意必须 ...
- [原译]实现IEnumerable接口&理解yield关键字
原文:[原译]实现IEnumerable接口&理解yield关键字 著作权声明:本文由http://leaver.me 翻译,欢迎转载分享.请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢 ...
- Python 深入理解yield
只是粗略的知道yield可以用来为一个函数返回值塞数据,比如下面的例子: for 取出alist的每一项,然后把i + 1塞进去.然后通过调用取出每一项: = [1, 2, 3, 4]for x in ...
- 深入理解yield(转)
yield的英文单词意思是生产,刚接触Python的时候感到非常困惑,一直没弄明白yield的用法.只是粗略的知道yield可以用来为一个函数返回值塞数据,比如下面的例子: def addlist(a ...
- Python并发编程之深入理解yield from语法(八)
大家好,并发编程 进入第八篇. 直到上一篇,我们终于迎来了Python并发编程中,最高级.最重要.当然也是最难的知识点--协程. 当你看到这一篇的时候,请确保你对生成器的知识,有一定的了解.当然不了解 ...
- [Python学习笔记-005] 理解yield
网络上介绍yield的文章很多,但大多讲得过于复杂或者追求全面以至于反而不好理解.本文用一个极简的例子给出参考资料[1]中的讲解,因为个人觉得其讲解最为通俗易懂,读者只需要对Python的列表有所了解 ...
- 深入理解yield(二):yield与协程
转自:http://blog.beginman.cn/blog/133/ 协程概念 1.并发编程的种类:多进程,多线程,异步,协程 2.进程,线程,协程的概念区别: 进程.线程和协程的理解 进程:拥有 ...
随机推荐
- 设置EditText控件中提示消息hint的字体颜色和大小
设置EditText控件中提示消息hint的字体颜色和大小 1.设置字体大小 代码例: public void init(){ hint= (EditText) findViewById(R.id.i ...
- ajax 原理----初级篇
一.贴dome,ajax三大步 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...
- Truncated incorrect DOUBLE value错误
mysql报错:Truncated incorrect DOUBLE value sql的update语法错误eg: update Person set name = 'auhnayuiL' and ...
- 翻译一篇文章:It's Difficult to Grow a Test Developer(成为测试开发工程师的艰辛)
翻译一篇文章:It's Difficult to Grow a Test Developer(成为测试开发工程师的艰辛) 以下文章是送给来poptest学习测试开发工程师的学员们,很多人想测试工程 ...
- Codeforces 392C Yet Another Number Sequence (矩阵快速幂+二项式展开)
题意:已知斐波那契数列fib(i) , 给你n 和 k , 求∑fib(i)*ik (1<=i<=n) 思路:不得不说,这道题很有意思,首先我们根据以往得出的一个经验,当我们遇到 X^k ...
- salesforce 零基础学习(六十九)当新增/修改一条记录以后发生了什么(适合初学者)
salesforce开发中,我们会对object进行很多的操作,比如对object设置字段的必填性唯一性等,设置validation rule实现一下相关的字段的逻辑校验,设置workflow实现某个 ...
- 上传图片转为base64格式预览并压缩图片(不兼容IE9以下浏览器,兼容移动端ios,android)
前些天公司要求在微信移动端做上传图片并预览的功能,要求能够调用摄像头拍照并立即预览. 在网上搜了一些方法,开始自己写了个简单的功能实现代码.结果发现移动端拍照出来的图片动不动就2M+,又因为要批量上传 ...
- 脚本语言:Xmas(一)
很偶然的一个想法,在从北京回成都的高铁上:我想要一个计算器.于是在火车上花了十来个小时,完成了一个模型:能够处理+-*/的优先级,以及"()",比如:1+(3+2)*4.这已是一年 ...
- StarUML的9种图
UML的九种图:用例图,类图,对象图,状态图,活动图,序列图,协作图,构件图,部署图.外加包图. (一).用例图 1.定义:由参与者(Actor).用例(Use Case)以及它们之间的关系构成的用于 ...
- CSS 预处理器中的循环
本文由 nzbin 翻译,黄利民 校稿.未经许可,禁止转载! 英文出处:css-tricks.com 发表地址:http://web.jobbole.com/91016/ 如果你看过老的科幻电影,你一 ...