并发编程 协程引入篇

3.协程篇

1.装饰器

2.迭代器

3.生成器

3.1.知识回顾

3.协程篇

多进程和多线程切换之间也是有资源浪费的,相比而言协程更轻量级

3.1.知识回顾

1.装饰器

https://www.cnblogs.com/dotnetcrazy/p/9333792.html#2.Python装饰器

基础拓展篇已经讲的很透彻了,就不再雷同了,贴一个简单案例,然后扩展说说、 和

2.迭代器

https://www.cnblogs.com/dotnetcrazy/p/9278573.html#6.Python迭代器

过于基础的就不说了,简单说下,然后举一个 的 :

判断是否可迭代:(能不能for遍历)

判断是否是迭代器:(能不能 遍历)

PS:迭代器是一定可以迭代的

可迭代对象转迭代器:(生成器都是迭代器)

把 等 变成 可以使用 函数 eg:(节省资源)

PS:生成器都是 对象,但list、dict、str虽然是 ,却不是

提醒一下:

查看一下 的源码就知道了:

之前说了个 CSharp 的 OOP Demo,这次来个 的,我们来一步步演变:

这时候依然不是迭代器

这个可以类比C#:

能不能foreach就看你遍历对象有没有实现IEnumerable,就说明你是不是一个可枚举类型(enumerator type)

是不是个枚举器(enumerator)就看你实现了IEnumerator接口没

先看看Python对于的类吧:

读源码的好处来了==>,上次漏讲了吧~

上面说迭代器肯定可以迭代,说很抽象,代码太直观了 (继承):

现在我们来模仿并实现一个 版本的 :

3.生成器

往期文章:https://www.cnblogs.com/dotnetcrazy/p/9278573.html#5.Python生成器

生成器是啥?看源码就秒懂了:(迭代器的基础上再封装)

迭代器的基础上再封装了两个抽象方法 、 和屏蔽异常的方法

现在用生成器的方式改写下斐波拉契数列:(列表推导式改成小括号是最简单的一种生成器)

注意下这几点:

generator刚启动的时候,要么 next(),要么 send(None),不然会引发:

在一个generator函数中,遇到return或者break则直接抛出StopIteration终止迭代

如果没有则默认执行至函数完毕

如果想要拿到返回值,必须捕获 错误,返回值包含在 的 中

输出:

其他的也没什么好说的了,读完源码再看看之前讲的内容 哦

下级预估:多路复用IO,异步IO

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181116G0H5X900?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券