Python中对于yield的个人理解
来源:互联网 发布:gts250输出端口有哪些 编辑:程序博客网 时间:2024/04/30 15:18
</pre>学习yield,自己的一点理解,可能有不对,欢迎指正<p></p><p></p><p>yield定义了一个生成器,每次都会return一个值,返回之后到下次调用的时候,在上次调用结束的地方开始继续执行,并且使用原来的数据不变</p><p>同时,调用返回的其实是一个迭代器结果,因此可以使用for in语句</p><p></p><p>再说明两点,对这个生成器的访问有next()和send('xxxx')两种方式</p><p>两者都会返回下一条yield语句的那个值,但是send可以传一个参数,可以修改当前yield语句的赋值</p><p></p><p>例如:</p><p></p><p></p><pre name="code" class="python">def h(): print 'step1' yield 1 tt = yield 2 print tt, "oooooo" yield tt yield 3c = h()n1 = c.next()print n1vv = c.next()print vvstr = c.send('bupt')print strprint c.next()
n1= next()
执行到yield 1这句,执行了一个print,同时会返回一个1给n1
vv = c.next()这句,从上次执行地方开始继续执行,执行到yield 2这个地方
返回2给vv
send('bupt')执行到yield tt这句,但是send传送了一个参数 bupt,上次执行到yield 2这个地方,然后用这个参数修改,这样就变成了 yield ‘bupt’,同时tt被修改,返回给str
最后一个next,就自然而然返回3了
但是用迭代器的方式访问,就可以安全访问到最后一个yield之后的一些东西,例如:
def my_generator(): print 'starting up' yield 1 print "workin'" yield 2 print "still workin'" yield 3 print 'done' for n in my_generator(): print n
参考文章如下:
参考1
参考2
参考3
0 0
- Python中对于yield的个人理解
- Python中yield的理解
- 对python yield 生成器的理解 --个人笔记
- Python Scrapy中yield Request的理解
- Python中yield的简单理解
- Python yield 的理解
- python中yield深入理解
- Python的yield相关理解
- 对于Python中RawString的理解
- 对于dequeueReusableCellWithIdentifier:的个人理解
- 对于dequeueReusableCellWithIdentifier:的个人理解
- 对于dequeueReusableCellWithIdentifier:的个人理解
- 个人对于SDN的理解
- 个人对于lower_bound的理解
- 对于bootstrap的个人理解
- 对于NHibernate中延迟加载个人的一些理解
- 个人对于OC中delegate、block的简单理解
- 对于angular 中MVC 和 MVVM 的一些个人理解
- shell字符串的截取的问题
- 使用Nexus创建Maven私有仓库
- c中嵌入Python,提供灵活性
- 推荐cocos2d-x博客
- android json解析及简单例子
- Python中对于yield的个人理解
- index range scan 单块读 无法走并行
- 微信公众平台开发(2)-消息封装
- Android开发——自动连接指定SSID的wifi热点(不加密/加密)
- 关于编译一些问题的解决方案(二)
- JSON
- JQUERY获取当前页面的URL信息
- linux 的date命令及系统时间设置
- 随机函数 rand,srand,random,srandom 的区别与使用