一、装饰器:
1.1 装饰器原则:
对扩展开发
对修改封闭
不改变调用方式
1.2 应用场景:
框架
面向对象
程序登录认证等
1.3 装饰器建立与示例:
1.3.1 装饰器建立:
import time # 装饰器 def warpper(f): # 接收被装饰的函数内存地址 # 装饰器闭包函数 def inner(*args, **kwargs): print('.........start..........') start_time = time.time() # 起始时间 f(*args, **kwargs) # 调用被装饰的函数 func1 func2 end_time = time.time() # 结束时间 print('这个{} 函数,执行时间为:{}'.format(f.__name__, end_time - start_time)) print('.........end..........') return inner # 装饰器普通调用(方法一): # 普通传参 # 被装饰函数 def func1(s): # 普通传参 print(s) # 打印位置参数 print('这是一个旧函数') time.sleep(1) # 睡一秒 func = warpper(func1) func(5) # 动态传参 # 被装饰函数 def func2(*args, **kwargs): print(args) # 打印动态位置参数 print(kwargs) # 打印动态默认参数 print('这是一个旧函数') time.sleep(1) # 睡一秒 func = warpper(func2) func(5, 2, **{'a': 1, 'b': 2}) # 装饰器语法糖调用(方法二): def warpper(f): # 接收被装饰的函数内存地址 def inner(*args,**kwargs): # 接受被装饰函数的参数 start_time = time.time() # 新功能 ret = f(*args,**kwargs) # 调用被装饰的函数,被装饰参数带上 end_time = time.time() print('%s函数的运行时间:%s'%(f.__name__,end_time - start_time)) return ret # 被装饰的函数返回值 return inner @warpper # func = warpper(func) 语法糖 def func(*args,**kwargs): print(args) # 打印被装饰的函数参数 print('这是主功能!') time.sleep(1) return '小姐姐' # 返回值 ret = func(5) # ret = func(5) == inner(5) 返回值 func(5) print(ret) # 被装饰的函数返回值 小姐姐