当前位置: 首页 > news >正文

网站制作器如何做网盟推广网站

网站制作器,如何做网盟推广网站,服务器租用泰海,有什么网站建设软件从句法上看,协程与生成器类似,都是定义体中包含 yield 关键字的函数。可是,在协程中,yield通常出现在表达式的右边(例如,datum yield),可以产出值,也可以不产出——如果 yield 关键字后面没有表…

从句法上看,协程与生成器类似,都是定义体中包含 yield 关键字的函数。可是,在协程中,yield通常出现在表达式的右边(例如,datum = yield),可以产出值,也可以不产出——如果 yield 关键字后面没有表达式,那么生成器产出 None。协程可能会从调用方接收数据,不过调用方把数据提供给协程使用的是 .send(datum) 方法,而不是 next(…) 函数。通常,调用方会把值推送给协程。

yield 关键字甚至还可以不接收或传出数据。不管数据如何流动,yield 都是一种流程控制 工具,使用它可以实现协作式多任务:协程可以把控制器让步给中心调度程序,从而激活 其他的协程。

从根本上把 yield 视作控制流程的方式,这样就好理解协程了。

16.1 生成器如何进化成协程

16.2 用作协程的生成器的基本行为

def simple_coroutine():print('-> coroutine started')x = yieldprint('-> coroutine received:', x)>>> my_coro = simple_coroutine()
>>> my_coro
<generator object simple_coroutine at 0x100c2be10>
>>> next(my_coro)
-> coroutine started
>>> my_coro.send(42)
-> coroutine received: 42
Traceback (most recent call last):...StopIteration

与创建生成器的方式一样,调用函数得到生成器对象。

四个状态:

‘GEN_CREATED’

等待开始执行。

‘GEN_RUNNING’

解释器正在执行。只有在多线程应用中才能看到这个状态。此外,生成器对象在自己身上调用 getgeneratorstate 函数也行,不过这样做没什么用。

‘GEN_SUSPENDED’

在 yield 表达式处暂停。

‘GEN_CLOSED’

执行结束。

始终要调用 next(my_coro) 激活协程——也可以调用 my_coro.send(None),效果一样。

16.3 示例:使用协程计算移动平均值

def averager():total = 0.0count = 0 average = None while True:term = yield averagetotal += termcount += 1average = total/count>>> coro_avg = averager()
>>> next(coro_avg)
>>> coro_avg.send(10)
10.0
>>> coro_avg.send(30)
20.0
>>> coro_avg.send(5)
15.0

先输出再等待输入。

16.4 预激协程的装饰器

from functools import wrapsdef coroutine(func):
"""装饰器:向前执行到第一个`yield`表达式,预激`func`"""@wraps(func)def primer(*args,**kwargs):gen = func(*args,**kwargs)next(gen)return genreturn primer

使用yield from句法(参见16.7节)调用协程时,会自动预激。

16.5 终止协程和异常处理

exc_coro.close()
exc_coro.throw(DemoException)
class DemoException(Exception):
"""为这次演示定义的异常类型。"""
def demo_finally():print('-> coroutine started')try:while True:try:x = yieldexcept DemoException:print('*** DemoException handled. Continuing...')else:print('-> coroutine received: {!r}'.format(x))finally:print('-> coroutine ending')

16.6 让协程返回值

...
return Result(count, average)try:coro_avg.send(None)
except StopIteration as exc:result = exc.value

16.7 使用 yield from

yield from x表达式对x对象所做的第一件事是,调用iter(x),从中获取迭代器。

yield from 的主要功能是打开双向通道,把最外层的调用方与最内层的子生成器连接起来。

委派生成器

包含 yield from <iterable> 表达式的生成器函数。

子生成器

yield from 表达式中 <iterable> 部分获取的生成器。

调用方

指代调用委派生成器的客户端代码。

示例用法:

# 子生成器
def averager():total = 0.0count = 0average = Nonewhile True:term = yieldif term is None:breaktotal += termcount += 1average = total/countreturn Result(count, average)# 委派生成器
def grouper(results, key):while True:results[key] = yield from averager()# 调用方
def main(data):results = {}for key, values in data.items():group = grouper(results, key)next(group)for value in values:group.send(value)group.send(None) # 重要!# print(results) # 如果要调试,去掉注释report(results)

如果子生成器不终止,委派生成器会在 yield from 表达式处永远暂停。

16.8 yield from 的意义

16.9 使用案例:使用协程做离散事件仿真

http://www.yayakq.cn/news/289496/

相关文章:

  • 企业网站管理系统c品牌设计公司品牌设计公司排名
  • 模板网站有什么不好网站内链建设和外链的推广
  • 谷城网站定制商城网站建设资讯
  • 石桥铺网站建设阿里巴巴法拍房官网
  • 自己的网站建设wordpress汉化客户端
  • 个人简历模板免费下载网站深圳龙华区是富人区吗
  • wordpress子站如何修改dns 快速使用境外网站
  • 做的页面好看的网站cms网站建设教程
  • 做文献ppt模板下载网站国际交流中心网站建设与管理制度
  • 无极网站站怎么有的下不了眼镜网站源码
  • 网站建设怎么样企业网络营销方法
  • 住房和城乡建设部网站倪虹珠江现代建设 杂志社网站
  • 凯叔讲故事网站谁做的网站外链有什么用
  • 玉环网站制作网站怎么做才 吸引人
  • 顺德品牌网站建设临沂做网站找哪家好
  • 毕节建设网站建站公司最喜欢的网站
  • 怎么用PS做网站广告图网业截屏怎么截
  • 网页制作与网站开发模板广州百度推广代理公司
  • 企业网站设计流程帮别人做网站进了看守所
  • 做网站和做app哪个简单免费虚拟主机免费空间
  • 电子商务网站推广主要方式注册子公司流程及所需资料
  • 企业注册在哪个网站申请wordpress 主题 google字体
  • 数字博物馆网站建设内容一个完整的个人网站
  • 网站后台购买winserver2008上用iis发布网站
  • 电商类网站有几个主流程深圳网站制作公司平台
  • 东凤镇做网站公司商城网站建设快速服务
  • 深圳哪里可以做物流网站文山网站建设联系电话
  • 二手书交易网站策划书html代码例子
  • 网站建设分配人员方案wordpress 小工具调用
  • 商务网站建设期末考试大气学校网站