简单的装饰器举例
def wrapper(f): # 装饰器函数 def inner(*args,**kwargs): print('在函数执行前') ret = f(*args,**kwargs) # 被装饰的函数 print('在函数执行后') return ret return inner@wrapper # @ 语法糖 ,@装饰器函数名def func(a,b):# 被装饰的函数 print(f'{a}+{b}={a+b}')# 被装饰器装饰后,函数名 func = wrapper(func) = innerresult = func(1,2)# result = func(1,2) = inner(1,2)
装饰器的作用
不想修改函数的调用方式 但是还想在原来的函数前后添加功能。timmer就是一个装饰器函数,只是对一个函数 有一些装饰作用
原则
开放封闭原则:
对扩展是开放的,对修改是封闭的。
本质
装饰器的本质 : 闭包函数
函数名的两个内建函数
def wahaha(): ''' 一个打印娃哈哈的函数 :return: ''' print('娃哈哈')print(wahaha.__name__) #查看字符串格式的函数名 # wahahaprint(wahaha.__doc__) #document #一个打印娃哈哈的函数 # :return:
多个装饰器装饰同一个函数
#多个装饰器装饰一个函数def wrapper1(func): def inner1(): print('wrapper1 ,before func') ret = func() print('wrapper1 ,after func') return ret return inner1def wrapper2(func): def inner2(): print('wrapper2 ,before func') ret = func() print('wrapper2 ,after func') return ret return inner2def wrapper3(func): def inner3(): print('wrapper3 ,before func') ret = func() print('wrapper3 ,after func') return ret return inner3@wrapper3@wrapper2@wrapper1def f(): print('in f') return '哈哈哈'print(f())
使用场景
记录用户的登录情况、、、计算这个函数的执行时间