策略模式
类继承abc.ABC即实现抽象类,方法可用abc.abstractmethod装饰,表明为抽象方法
装饰器基础
装饰器实际是语法糖,被装饰的函数实际是装饰器内部返回函数的引用
缺点:装饰器函数覆盖了被装饰函数的__name__和__doc__属性
装饰器执行时机
装饰器在装饰函数(定义被装饰函数)时就会执行
dis.dis可查看代码执行机器字节码
闭包
对象有属性可保存内容,函数可通过闭包实现对象的属性保存值。abc叫自由变量,是未绑定在本地空间的变量
nonlocal
闭包中如果对外面变量赋值一些操作,比如+=会报错referenced before assignment,因为赋值解释器会判断为局部变量,但变量还没赋值,就会报错,而不会用外面作用域已经定义好的同名变量。此时可用nonlocal声明变量,作用是声明变量为自由变量。
注意py2没有nonlocal,需要找折中方法
标准库的一些装饰器
functools.lru_cache
可缓存变量结果,比如斐波那契数列,较小的数字会递归执行很多次,lru_cache会缓存已执行的结果