装饰器是一个可以很好满足“开放-封闭”设计原理的一种设计模式。其主要原理与闭包相似,函数内返回一个函数名。如下段代码:
def home(): print('---首页----') def america(): print('---欧美专区---') def japan(): print('----日韩专区----') def henan(style): print('-----河南区-----')
如果我要给每一个模块加上登陆认证,可以写一个装饰器:
user_status = False def login(func): def inner(*args,**kwargs): _username = 'alex' _password = '123123' global user_status if user_status == False: username = input('username:') passwd = input("password:") if username == _username and passwd == _password: print('welcome %s' % username) # func() user_status = True else: print('password or username does not exited') if user_status==True: print('用户通过认证') func(*args,**k) return inner #返回函数名
相当于在login函数里面,套用inner函数
当你调用henan函数的时候,
henan=login(henan) #执行login函数,返回inner名。这时候并执行inner
henan()#真正的执行了inner
完成了一个小小的login装饰器