python 生成器总结

最近因为看见公司一位大神将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_space = 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出来之后生成器内部停止。

暂时就这样,想到什么再补充

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值