python 生成器总结
2016-06-10 09:18
513 查看
最近因为看见公司一位大神将yield用的出神入化,极为赞叹,遂研究了一下他的代码,总结出以下yield使用方法,希望大家加以指正。
都知道yield是python生成器,他可以将数据一个一个的“生”出来而不是将所有数据存储到内存中,从而造成大量内存的占用,这个是yield使用最常见的一种方式,这种方式大概是使用for循环中嵌套yield语句来实现的。
如下:
for i in range(x): # do something in there yield i
yield还有一种使用方式就是异步,主要的应用有tornado中的@coroutine 如果想要进行异步之间的通信,就可以使用generation.send() 来进行交流
def yield_test(): page = 1 while 1: try: # something else last_spa 4000 ce = yield page print last_space except StopIteration: break last_space = None generator = yield_test() current_page = generator.send(last_space) print current_page last_space = 1 for i in range(x): current_page = generator.send(last_space) print current_page current_space += 1
生成器在创建的时候,首先在创建生成器的时候,生成器中的代码并不执行,在send()方法执行之后才开始执行,并且这时执行完yield就停止了,就是将生成器中的值传给外边,然后生成器内部就处于停止状态,等待外边再次传入值。(注意,第一次传入的None并没有将数据赋值)第二次send的值才首次赋值,并且循环一次,将值yield出来之后生成器内部停止。
暂时就这样,想到什么再补充
相关文章推荐
- 直接运行Python程序
- Panda3D学习之路(二)
- 最长递增自序列 python
- python regex
- python之路 模块,序列化,迭代器,生成器
- python的递归函数--含尾递归
- python中的切片--Splice
- 老男孩学习---python课程Day05
- 老男孩学习---python课程Day01
- Python 2.7中的Numpy、SciPy、MatPlotLib安装与配置
- build python 2.7.11 for mips
- Python3学习笔记07-特殊方法与多范式、上下文管理器、对象的属性
- Python3学习笔记08-闭包、装饰器、内存管理
- Python3学习笔记09-python常用方法总结
- Python3学习笔记10-标准库之正则、时间、路径、文件管理、存储对象
- regex pattern in python for parsing html
- Python filter()函数
- Python 进阶学习笔记1
- 一个将文件复制后以时间命名的Python程序
- ImportError: No module named 'pip'