一.两个装饰器
def w1(func):
print("---正在装饰1----")
def inner():
print("---正在验证权限1---")
func()
return inner
def w2(func):
print("---正在装饰2---")
def inner():
print("---正在验证权限2---")
func()
return inner
@w1 #装饰器是对函数进行装饰,若下面不是函数,会暂停,让下面的执行,再来看看是否是函数.w1对下面的装饰过的f1装饰
@w2 #先是W2对f1进行装饰,即执行f1=w2(f1),返回f1这个函数
def f1():
print("----f1----")
f1() #装饰和调用是分开的
# 调用的时候还是从上到下,先调用w1,再是w2,之后执行被装饰函数
---正在装饰2---
---正在装饰1----
---正在验证权限1---
---正在验证权限2---
----f1----
装饰有参数的函数
def func(funcName):
print("--func--")
def func_in(*args, **kwargs): # 这里传参数对应着调用时候f1(1, 2)
print("---func_in---")
funcName(*args, **kwargs) # 这里传参数对应这原函数定义就有(a,b)
return func_in
@func
def f1(a, b):
print("---test---")
print("---test---a%d,b=%d"%(a,b))
# f1 = func(f1)
@func
def f2(a, b, c):
print("--test--a=%d,b=%d,c=%d"%(a,b,c))
f1(1, 2)
f2(1, 2, 3)
--func--
--func--
---func_in---
---test---
---test---a1,b=2
---func_in---
--test--a=1,b=2,c=3
对有返回值的函数进行装饰
def func(funcName):
print("--func--")
def func_in(*args, **kwargs):
print("---func_in---")
ret = funcName(*args, **kwargs) #原来定义的函数有返回值,所以这里也有返回值
return ret #实际下面调用是掉func_in这个函数,所以要想有返回值的返回
return func_in
@func
def f1(a, b):
print("---test---")
print("---test---a%d,b=%d"%(a,b))
return "hah" #有返回值
# f1 = func(f1)
ret = f1(1, 2)
print(ret)
--func--
---func_in---
---test---
---test---a1,b=2
hah