Python协程演进过程
Milestone
协程相关的关键字和方法的引入:
Python 2.2(2001年)yield
Python 2.5(2006年) .send() .throw() .close()
Python 3.3(2012年) yield from Python 3.5(2015年)async await
Duck type
在面向对象的支持上,C++采用了多重继承等一系列C++风格的东西,Java是单继承+接口,JavaScript之前是Prototype,而Python采用了多继承+duck type,并用super来安全的初始化父类。而同样喜欢宣传自己优雅的设计的Ruby也是采用的Duck Type。
什么是Duck Type
当我看到一只鸟走路像鸭子,游泳像鸭子,叫声像鸭子,那我就把它叫做鸭子。(When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.)
简而言之就是,判断一个对象的类型不是看他爸爸是谁,而是他实现了什么方法。 举个例子:
>>> class Foo:
... def __iter__(self):
... pass
>>> from collections import Iterable
>>> isinstance(Foo(),Iterable)