最近由于工作太忙,没有时间更新自己的成神之路,但最近在工作上也是收获满满,很累,精神上的累,总是会有细节被忽视,总是会有莫名其妙的bug出现。总而言之,痛并快乐着。今天还在为不知所以的bug苦恼,明天就解决了bug,收获的成就感不言而喻。总之,我们不是在写bug的路上,就是在解决bug的路上,希望大家每一天都在进步,希望大家在编程的路上且行且珍惜。话不多讲,今天我要说一下。有关python装饰器的内容
python装饰器
定义:本质是函数,就是为其他函数添加附加功能 原则: 1.不能修改被装饰的函数的源代码 2.不能修改被装饰的函数的调用方式 实现: 1.函数即变量 2.高级函数 3.函数嵌套 4.高级函数+嵌套函数=>装饰器
直接上代码
模拟一个访问页面需要认证的功能
user,password='admin','123456'
def auth(func):
def wrapper(*args,**kwargs):
username = input("please input username :")
pwd = input("please input password :")
if username == user and pwd == password:
print("\033[32;1mAuth success\033[0m")
return func(*args, **kwargs)
else:
print("\033[31;1mAuth fail\033[0m")
return wrapper
def index():
print("welcome to index")
@auth
def home():
print("welcome to home")
return "from home"
@auth
def bbs():
print("welcome to bbs")
return "from bbs"
index()
print(home())
bbs()
上述已经完成了一个简单装饰器,在深入变形一次
home与bbs都是通过一个认证的地方,在工作中,我们可能需要从不同的地方认证,这就是需要,我们再次对装饰器封装
直接上代码
user,password='admin','123456'
def loginInput():
username = input("please input username :")
pwd = input("please input password :")
return username,pwd
def auth(auth_type):
print("auth_type : ",auth_type)
def outter(func):
def wrapper(*args, **kwargs):
if auth_type == 'localhost':
username, pwd = loginInput()
if username == user and pwd == password:
print("\033[32;1mAuth success\033[0m")
return func(*args, **kwargs)
else:
print("\033[31;1mAuth fail\033[0m")
elif auth_type == 'ldap':
print("Go To ldap ......")
username,pwd = loginInput()
if username == user and pwd == password:
print("\033[32;1mAuth success\033[0m")
return func(*args, **kwargs)
else:
print("\033[31;1mAuth fail\033[0m")
return wrapper
return outter
def index():
print("welcome to index")
@auth(auth_type='localhost')
def home():
print("welcome to home")
return "from home"
@auth(auth_type='ldap')
def bbs():
print("welcome to bbs")
return "from bbs"
index()
print(home())
bbs()