文章内容转载自上海-悠悠:https://www.cnblogs.com/yoyoketang/p/10801242.html
python装饰器本质上就是一个函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外的功能,装饰器的返回值也是一个函数对象。
def w1(func):
def inner():
# 验证1
# 验证2
# 验证3
return func()
return inner
@w1
def f1():
print ‘f1‘
#函数装饰器-函数不带参数
import time
def runtime(func):
def wrapper():
start = time.time()
f = func() # 原函数
end = time.time()
print("运行时长:%.4f 秒" % (end-start))
return f
return wrapper
@runtime
def func_a():
print("func_a")
time.sleep(0.5)
@runtime
def func_b():
print("func_b")
time.sleep(0.8)
if __name__ == ‘__main__‘:
func_a()
func_b()
#函数装饰器-函数带参数
import time
def runtime(func):
def wrapper(*args,**kwargs):
start = time.time()
f = func(*args,**kwargs) # 原函数
end = time.time()
print("运行时长:%.4f 秒" % (end-start))
return f
return wrapper
@runtime
def func_a(a):
print("func_a")
print("a="+a)
time.sleep(0.5)
@runtime
def func_b(b,c="3"):
print("func_b")
print("b="+b)
print("c="+c)
time.sleep(0.8)
if __name__ == ‘__main__‘:
func_a("1")
func_b("2")

#函数装饰器-装饰器带参数
import time
def runtime(slowly=1):
def wrapper(func):
def inner_wrapper(*args, **kwargs):
start = time.time()
f = func(*args, **kwargs) # 原函数
end = time.time()
t = end-start
print("运行时长:%.4f秒"%t)
time.sleep(slowly) # 延迟效果
new_end = time.time()
print("延时时长:%.4f 秒" % (new_end-start))
return f
return inner_wrapper
return wrapper
@runtime(1.5)
def func_a(a):
print("a="+a)
time.sleep(0.5)
@runtime(0.5)
def func_b(b, c="c"):
print("b="+b)
print("c="+c)
time.sleep(0.8)
if __name__ == ‘__main__‘:
func_a("a")
func_b("b", c="c")

#类装饰器-装饰器带参数
import time
class runtime:
def __call__(self, func):
def inner_wrapper(*args, **kwargs):
start = time.time()
f = func(*args, **kwargs) # 原函数
end = time.time()
t = end-start
print("运行时长:%.4f秒"%t)
return f
return inner_wrapper
@runtime()
def func_a(a):
print("a="+a)
time.sleep(0.5)
@runtime()
def func_b(b, c="c"):
print("b="+b)
print("c="+c)
time.sleep(0.8)
if __name__ == ‘__main__‘:
func_a("a")
func_b("b", c="c")

#类装饰器-装饰器带参数
import time
class runtime:
def __init__(self,slowly=1):
self.slowly=slowly
def __call__(self, func):
def inner_wrapper(*args, **kwargs):
start = time.time()
f = func(*args, **kwargs) # 原函数
end = time.time()
t = end-start
print("运行时长:%.4f秒"%t)
time.sleep(self.slowly) # 延迟效果
new_end = time.time()
print("延时时长:%.4f 秒" % (new_end-start))
return f
return inner_wrapper
@runtime(1.5)
def func_a(a):
print("a="+a)
time.sleep(0.5)
@runtime(0.5)
def func_b(b, c="c"):
print("b="+b)
print("c="+c)
time.sleep(0.8)
if __name__ == ‘__main__‘:
func_a("a")
func_b("b", c="c")

原文:https://www.cnblogs.com/crystal1126/p/12809587.html