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
领取专属 10元无门槛券
私享最新 技术干货