python协程初步---一个生成器的实现

Posted saintdingtheGreat

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python协程初步---一个生成器的实现相关的知识,希望对你有一定的参考价值。

和列表那种一下占据长度为n的内存空间不同的是,生成器在调用的过程中逐步占据内存空间,因此有着很大的优势

  • 一个斐波纳契数列的例子
def myfibbo(num):
    a,b=0,1
    count=0
    while count<num:
        a,b=a+b,a
        print(b)
        count+=1

运行 :myfibbo(10)

  • 一个生成器版本的例子
def myfibbo(num):
    a,b=0,1
    count=0
    while count<num:
        a,b=a+b,a
        ret = yield b#代码执行到yield处,就会“绕道”执行下面的代码
        print(ret)
        count+=1

s = myfibbo(10)
s.send(None)#第一次传入值时要发送None,因为第一次b这个变量已经承载了1这个值,而无法接收其他值,只能传入None
print(next(s))
s.send("程劲")#执行到yield b时,由于b正在计算,send的值替代了b作为结果返回给变量ret,b计算完成后返回给ret
print(next(s))
s.send("昌仔")
print(next(s))
s.send("劲儿弟弟")
print(next(s))
s.send("陈培昌")
print(next(s))

输出结果:

None
1
程劲
None
2
昌仔
None
5
劲儿弟弟
None
13
陈培昌
None
34

 

以上是关于python协程初步---一个生成器的实现的主要内容,如果未能解决你的问题,请参考以下文章

python 异步编程

Kotlin学习手记——协程初步

Python协程实现生产者消费者模型

Python中协程的实现

python协程初步--gevent库使用以及解释什么是猴子补丁monkey_patch

python基础-------迭代器,生成器,协程函数