装饰器
def func_out(func):
print("func_out")
def func_in(*args, **kwargs):
print("验证", args, kwargs)
# 默认返回None
return func(args, kwargs)
return func_in
def func_out2(func):
print("func_out2")
def func_in222(*args, **kwargs):
print("验证222", args, kwargs)
# 默认返回None
return func(args, kwargs)
return func_in222
# 带参数的装饰器
def logging(flag):
print("带参数的装饰器", flag)
def func_out3(func):
print("func_out3")
def func_in333(*args, **kwargs):
print("验证333", args, kwargs)
# 默认返回None
return func(args, kwargs)
return func_in333
return func_out3
# 按顺序执行
@logging("aaaaaaaaaaaaaaa")#1执行,返回func_out3 4执行,传入func_in 返回func_in333
@func_out #3执行,传入func_in222 返回func_in
@func_out2 #2执行,传入login 返回func_in222
#5执行func_in333,执行func_in,执行func_in222,执行login
def login(*args, **kwargs):
print("登录", args, kwargs)
return args
# 以下代码是调用内层函数,外层函数在添加装饰器时已经调用
a = login(100, age=10)
print(a)
类装饰器
class Func(object):
def __init__(self, fn):
self.__fn = fn
# 创建对象时直接调用
def __call__(self):
print("验证")
self.__fn()
# f = Func(1)
# f() 调用call方法
@Func # login = Func(login)
def login():
print("登录")
#调用Func的call方法
login()