最简单的装饰器----有返回值的----有一个参数----万能参数装饰器的作用:
不想修改函数的调用方式,但是还想再原来的函数前后添加功能#原则:开放封闭原则
开放: 对扩展是开放的
封闭: 对修改是封闭的
语法糖:@装饰器函数名,@timmer等价于func = timmer(func),其中func()是被装饰函数,timmer()就是装饰器函数

import time
def timmer(f):
start = time.time()
f()
end = time.time()
print(end-start)
def func():
time.sleep(0.1)
print(‘nice!‘)
timmer(func)
import time
#timmer()就是装饰器函数,只是对一个函数有装饰作用
def timmer(f):#通过此闭包函数返回一个内部函数名,然后在外部接收,让接收的函数名与外部函数名保持一致即可
def inner():
start = time.time()
ret = f() #被装饰的函数
end = time.time()
print(end-start)
return ret
return inner
@timmer #语法糖---@装饰器函数名,等价于func = timmer(func)
def func(): # 被装饰的函数
time.sleep(0.1)
print(‘nice!‘)
return ‘summertrain‘
# func = timmer(func)
result = func()
print(result)
import time
#timmer()就是装饰器函数
def timmer(f):#通过此闭包函数返回一个内部函数名,然后在外部接收,让接收的函数名与外部函数名保持一致即可
def inner(a):
start = time.time()
ret = f(a) #被装饰的函数
end = time.time()
print(end-start)
return ret
return inner
@timmer #语法糖---@装饰器函数名,等价于func = timmer(func)
def func(a): # 被装饰的函数
time.sleep(0.1)
print(‘nice!‘,a)
return ‘summertrain‘
# func = timmer(func)
result = func(1)
print(result)
#装饰带多个参数,且包括按照位置以及参数传参的装饰器
import time
#timmer()就是装饰器函数
def timmer(f):#通过此闭包函数返回一个内部函数名,然后在外部接收,让接收的函数名与外部函数名保持一致即可
def inner(*args,**kwargs):
start = time.time()
ret = f(*args,**kwargs) #被装饰的函数
end = time.time()
print(end-start)
return ret
return inner
@timmer #语法糖---@装饰器函数名,等价于func = timmer(func)
def func(a,b): # 被装饰的函数
time.sleep(0.1)
print(‘nice!‘,a,b)
return ‘summertrain‘
# func = timmer(func)
result = func(1,b=22)
print(result)
#例子
import time
def wrapper(f): # f是被装饰的函数
def inner(*args,**kwargs):
‘‘‘在被装饰函数之前要做的事儿‘‘‘
ret = f(*args,**kwargs)
‘‘‘在被装饰函数之前要后的事儿‘‘‘
return ret
return inner
@wrapper
def func(a,b):
time.sleep(0.1)
print(‘nice!‘,a,b)
return ‘summertrain‘
#减缩版
def wapper(func):
def inner(*args,**kwargs):
ret = func(*args,**kwargs)
return ret
return inner
@wapper
#qqxing = wapper(qqxing)
def qqxing():
print(1111)
result = qqxing()
原文:https://www.cnblogs.com/Cheryol/p/9740436.html