您的位置:首页 > 编程语言 > Python开发

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出来之后生成器内部停止。

暂时就这样,想到什么再补充
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: