yield,generator type
2016-06-24 14:44
471 查看
yield语句只用于定义generator函数,调用generator函数会返回一个geneator对象g; 可以通过调用g的方法控制g的运行
generator内部的变量及调用栈等都可以在generator的运行/挂起过程中得到保存,这个特性跟corountine很像,实际上像Tornado等也是利用yield,异步IO等实现的协程。
输出:
generator内部的变量及调用栈等都可以在generator的运行/挂起过程中得到保存,这个特性跟corountine很像,实际上像Tornado等也是利用yield,异步IO等实现的协程。
def generator(): try: m = yield 0 print('m1', m) m = yield m print('m2', m) m = yield m print('m3', m) except TypeError: print('In generator type exception caught.') yield 5 try: yield 8 yield 9 finally: print('clean up') if __name__ == '__main__': gtr = generator() # 返回一个generator print(next(gtr)) # 运行至第一个yield语句结束并返回,gtr的局部变量,调用栈得到保留 print('before send 991') print(gtr.send(991)) # print(next(gtr)) print(gtr.throw(TypeError, "generator throw 1.")) print(next(gtr)) gtr.close()
输出:
0 # yield 第一个值0, 对应 yield 0 before send 991 # 表明send还没运行且马上运行 m1 991 # 已经执行了send, 执行了m = (yield 0)的结果,(yield 0)的结果为send传递进去的参数991 991 In generator type exception caught. # throw可以被caught 5 8 clean up # close 会导致finally部分的运行。 after close
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例
- Python 七步捉虫法