美文网首页
python 协程

python 协程

作者: 落羽归尘 | 来源:发表于2019-08-24 10:57 被阅读0次

python 协程

生成器转协程

先看下面例子,我们根据此例子分析:

>>> def test():
...     print("start")
...     x = yield
...     print("x: %s" % x)
...     y = yield x
...     print("end")
...     print("y: %s" % y)
...
>>> g=test()
>>> next(g)
start
>>> g.send(3)
x: 3
3
>>> g.send(6)
end
y: 6
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
  • 首先,test是我们定义的一个生成器,定义体必须要有yield关键字,这个生成器可以当成协程使用。
  • 调用send方法前,必须调用一次next方法,对协程进行激活。
  • 第一次调用next时,碰到yield会停止
  • send(3)方法可以发送值给yield,x=yield也就是将x赋值为3,并且继续执行到下一个yield,而y = yield x,yield后面有x,会被当成类似return x打印出来
  • send(6) 会发送值给y,继续执行到下一个yield,而这时没有了,就会抛出StopIteration异常。

我们用一个例子通过协程的方式求移动平均值:

def averager():
    total = 0.0
    count = 0
    average = None
    while True:
        term = yield average 
        total += term
        count += 1
        average = total/count

ave=averager()
next(ave)
print(ave.send(2))
print(ave.send(3))
print(ave.send(4))
print(ave.send(5))
输出结果:
2.0
2.5
3.0
3.5

可以调用ave.close()方法终止协程。

yield from

yield from 简化了for循环的yield表达式:

def gen():
    for i in range(3):
        yield i

# 等同于

def gen_new():
    yield from range(3)

print(list(gen()), list(gen_new()))
输出结果:
[0, 1, 2] [0, 1, 2]

gen等同于gen_new。yield from后面跟可迭代对象x。因为yield from x会调用iter(x)。

相关文章

  • python异步协程(aiohttp,asyncio)

    python异步协程 环境:python3.7.0 协程 协程,英文叫做 Coroutine,又称微线程,纤程,协...

  • asyncio + asyncio 异步编程实例

    协程用法 接下来,我们来了解下协程的实现,从 Python 3.4 开始,Python 中加入了协程的概念,但这个...

  • Python 协程

    仅供学习,转载请注明出处 协程 协程,又称微线程,纤程。英文名Coroutine。 协程是啥 协程是python个...

  • 协程

    1.协程 协程,又称微线程,纤程。英文名Coroutine。 1.1 协程是什么 协程是python个中另外一种实...

  • Python并发编程——协程

    摘要:Python,协程,gevent 协程基本概念 协程,又称微线程,纤程。英文名Coroutine,是Pyth...

  • 协程介绍

    协程 协程,又称微线程,纤程。英文名Coroutine。 1.协程是什么? 协程是python个中另外一种实现多任...

  • 4-7

    协程 协程,又称微线程,纤程。英文名Coroutine。 协程是啥 协程是python个中另外一种实现多任务的方式...

  • 协程

    协程 协程,又称微线程,纤程。英文名Coroutine。 协程是啥 协程是python个中另外一种实现多任务的方式...

  • Python 协程 异步资料记录

    1. Python3.5协程原理 详细说明了Python协程产生的历史. 研究明白之后,写一篇文章,解释协程,并附...

  • 36.Python并发编程之协程

    Python并发编程之协程 协程协程是程序级别的概念,操作系统根本就没有协程的概念!!!协程的本质就是一条线程,可...

网友评论

      本文标题:python 协程

      本文链接:https://www.haomeiwen.com/subject/yxsfectx.html