Python装饰器与闭包

狂风中的少年 提交于 2020-01-17 15:36:37

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()
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!