python装饰器利用了函数闭包和函数可以当做参数进行传递的特性,函数闭包指在一个函数中嵌套一个函数,同时外层函数返回内层函数
user = {
"is_login": False
}
def edit_user():
print('用户名修改成功')
def add_article():
print('添加文章成功')
def login_required(func):
def wrapper():
if user['is_login'] == True:
func()
else:
print('跳转到登录页面')
return wrapper
login_required(edit_user)()
login_required(add_article)()
#利用语法糖可以简化调用
user = {
"is_login": False
}
def login_required(func):
def wrapper():
if user['is_login'] == True:
func()
else:
print('跳转到登录页面')
return wrapper
@login_required
def edit_user():
print('用户名修改成功')
@login_required
def add_article():
print('添加文章成功')
#调用时,由于@语法糖的作用,被装饰函数自动将自己的函数名作为参数传给装饰器函数
edit_user()
add_article()
来源:51CTO
作者:wx5a4c600866558
链接:https://blog.51cto.com/13560219/2461284