'''
装饰器:装饰器本身是一个函数,目的增加一些其他函数的额外功能
装饰其他函数
原则:
1.不会修改被装饰的函数源代码
2.不会修改装饰函数的调用方式,被装饰的函数使用方式不变 (我把你变成的女的但是你不知道)
实现装饰器:
1.变量是函数
2.高阶函数
把 函数名 当作实参
返回值中包含 函数名
3.嵌套函数(不是函数内点用其他函数,而是函数内在定义一个新的局部函数)
高阶函数+嵌套韩式=装饰器
'''
import time
def timmer(func):
def warpper(*args,**kwargs):#被装饰函数可能有各种各样的参数
start_time=time.time()
func(*args,**kwargs)
stop_time=time.time()
print("the run time is %s" %(stop_time-start_time))
return warpper
@timmer
def test1():
time.sleep(3)
print("finish test1")
def test2(func):
def deco():#不传参
start_time=time.time()
func()
stop_time=time.time()
print("the %s run time is %s" %(func,stop_time-start_time))
return deco
def test3(func):
def deco(name):#传参
print("装饰器的功能test3")
func(name)
return deco
@test2#自定义装饰器
def bar():
print("in the bar ")
@test3
def foo(name):#当要传参数时,装饰器也要输入参数
print("in the foo",name)
if __name__ == '__main__':
test1()#装饰器的使用方式
print("慢慢的变成装饰器:第一个")
test2(bar)#没改变源代码但是变了bar的调用方式,原来是bar()
print("慢慢的变成装饰器:第二个")
# print(test3(bar))
# bar=test3(bar)
# bar()
bar()
foo("lichen")
python 装饰器
最新推荐文章于 2025-08-08 11:09:55 发布