网站国际互联网备案号,企业官方网站建设,网页设计与网站建设课程报告,2016市网站建设总结装饰器#xff1a; 不修改被装饰对象的源代码#xff0c;也不修改调用方式的前提下#xff0c;给被装饰对象添加新的功能
原则#xff1a;开放封闭原则
开放#xff1a;对扩展功能#xff08;增加功能开放#xff09;#xff0c;扩展功能的意思是在源代码不做任何改变…装饰器 不修改被装饰对象的源代码也不修改调用方式的前提下给被装饰对象添加新的功能
原则开放封闭原则
开放对扩展功能增加功能开放扩展功能的意思是在源代码不做任何改变的情况下为其增加功能
封闭对修改源代码是封闭的
无参装饰器
基本模板
# 装饰器基本模板 -- 无参装饰器
def outer(func):def wrapper(*args, **kwargs):# 在这里要装饰之前的功能res func(*args, **kwargs)# 在这里要装饰之后的功能return resreturn wrapper案例演示
# 案例演示
import time
# 使用装饰器为函数增加计时功能
def count_time(func):def wrapper(*args, **kwargs):# 在这里要装饰之前的功能start_time time.time()res func(*args, **kwargs)# 在这里要装饰之后的功能end_time time.time()print(函数执行一共耗时{}秒.format(start_time-end_time))return resreturn wrapper# 功能函数
count_time # 使用装饰器对 time_func()进行装饰增加了计时的功能
def time_func(n):time.sleep(n)print({}秒后打印这句话.format(n))if __name__ __main__:time_func(5)pycharm模板功能
使用pycharm自带的模板功能快速创建模板
复制模板代码 —— file ——settings —— editor —— Live Templates (实时模板)
进入 Live Templates
1、展开python点击 选择 live Template
2、Abbreviation 输入快捷指令 , Description 输入模板描述 template text 粘贴进模板内容
3、点击difine 勾选python。
完成之后可以直接在代码编辑区输入快捷指令调出模板 完美伪装
将原函数的一些方法传给装饰器达到完美伪装
完美伪装的装饰器模板
from functools import wraps
def outer(func):wraps(func) # 用处是将原函数的属性传给装饰函数def wrapper(*args, **kwargs):# 在这里要装饰之前的功能res func(*args, **kwargs)# 在这里要装饰之后的功能return resreturn wrapper通过 from functools import wraps 引入一个 wraps的装饰器将源函数的一些属性传递给装饰器。比如
print(time_func) # 查看函数的内存地址
print(time_func.__name__) # 查看函数的函数名
print(time_func.__doc__) # 查看函数的描述文档案例
import time
from functools import wraps
# 使用装饰器为函数增加计时功能
def count_time(func):wraps(func) # 用处是将原函数的属性传给装饰函数def wrapper(*args, **kwargs):# 在这里要装饰之前的功能start_time time.time()res func(*args, **kwargs)# 在这里要装饰之后的功能end_time time.time()print(函数执行一共耗时{}秒.format(start_time-end_time))return resreturn wrapper# 功能函数
count_time # 使用装饰器对 time_func()进行装饰增加了计时的功能
def time_func(n, i):这个是一个被装饰函数param n:param i:return:time.sleep(n)print({}秒后打印{}.format(n, i))if __name__ __main__:# time_func(5, A)print(time_func) # 查看函数的内存地址print(time_func.__name__) # 查看函数的函数名print(time_func.__doc__) # 查看函数的描述文档有参装饰器
模板
def g_outer(X):def outer(func):def wrapper(*args, **kwargs):# 在这里要装饰之前的功能res func(*args, **kwargs)# 在这里要装饰之后的功能return resreturn wrapperreturn outer应用有参装饰器时 g_outer(X)