Python高级——多线程_11_装饰器
python核心编程2
流畅的python
1.闭包
特点:
1.函数嵌套定义
2.外部函数返回内部函数的引用
3.内部函数可以使用外部函数提供的自由变量/局部变量
概念:
内部函数 + 自由变量 构成的整体
修改外部函数的参数
python3:
nonlocal 修改外部函数的局部变量,只针对于不可变类型的数值
python2:
定义存储为列表后可修改
内部函数使用的自由变量来自**__clours**
2.开闭原则
对已经实现的代码进行关闭
对已经实现的代码进行扩展是开放的<不修改代码>
在不修改代码的情况下 对代码进行功能的扩展
3.装饰器
装饰函数,基于闭包实现
目的:不修改函数代码的情况下,对功能进行扩展
特点:只接受一个函数参数 就是被装饰的函数的引用 传参使用 *args **kwargs
形式上可以接收多个参数,但是装饰器只能接收一个函数
装饰器函数分为:
装饰器函数<基于闭包实现>;类装饰器<基于类实现>
@ws
def inner():
pass
@we == inner = ws(inner)
应用场景:
引入日志
函数执行时间统计
执行函数前预备处理
执行函数后清理功能
权限校验等场景
缓存
装饰器带参数
@装饰器(age,)
类装饰器 类实现的装饰器
多个装饰器装饰同一个函数
判断一个对象是否可调用 如果:对象() 那么就是可调用对象
常用的可调用函数对象: 类 函数名 匿名函数 方法 实现了call方法的实例对象
callable(方法名)
__call__可以让对象变成可调用对象