def timer(f):
#闭包,这里闭包的不是变量,而是形参f
def inner():
print("执行函数前")
f()
print("执行函数后")
return inner
@timer
def func():
print('hello ,装饰器')
time.sleep(0.1)
f1=func()
# 待返回值的装饰器
def timmer(f): #装饰器函数,它的形参一定是被装饰函数
def inner():
print("函数开始前书写区域")
x = f() #接受func的返回值
print("函数结束后书写区域")
return x #inner的返回值
return inner #timmer的返回值
@timmer # @装饰器函数名 ,它的下面一定是被装饰函数
def func():
print('你好,我要开始默写带返回值的装饰器了')
time.sleep(0.1)
return 'hello'
f2 = func()
print(f2)
# 带参数的装饰器
def timmer(f): #装饰器函数,它的形参一定是被装饰函数
def inner(*args,**kwargs):
print("函数开始前书写区域")
x = f(*args,**kwargs) #接受func的返回值
print("函数结束后书写区域")
return x #inner的返回值
return inner #timmer的返回值
@timmer # @装饰器函数名 ,它的下面一定是被装饰函数
def func(a):
print('你好,我要开始默写带返回值的装饰器了')
time.sleep(0.1)
print("函数参数", a)
return 'hello'
f2 = func(1)
print(f2)
# 通用装饰器
def wrapper(f):
def inner(*args,**kwargs):
ret = f(*args,**kwargs)
print('count')
return ret
return inner
@wrapper
def conf(a,b):
print(a,'+',b)
return 'hello'
x = conf(12,23)