装饰器

什么是装饰器?

装饰器是一个特殊的函数,可以理解为一种特殊的闭包。
详见https://blog.csdn.net/ljt735029684/article/details/80703649

如何理解?

闭包:函数内嵌套函数
将目标函数当作参数传入闭包中,在不修改目标函数的情况下,可以在闭包中进行函数功能的增加。

有什么用?

比如你做了一个功能,每个部门都可以用,但是后来某个部门和你吵架了,你不想让他用,就在原函数的基础上加一个装饰器,增加权限验证的功能,没有密码无法使用。代码如下:

# -*- coding: utf-8 -*-
def get_fuc(fuc):
    def fuc_1():
        x = input("请输入密码:")#此处添加权限验证
        if x == "123456":
            fuc()#密码正确才能调用该函数
        else:
            print("密码错误")#f否则提示密码错误
    return fuc_1


@get_fuc         //等同于test = get_fuc(test)#这是一个语法糖,所以装饰器里不能返回fuc_1()
def test():
    print("欢迎回来")

装饰器传参

本质:在最外层构建一个方法,将原来的装饰器函数进行返回

# -*- coding: utf-8 -*-
def get_fucc(pwd):
    def get_fuc(fuc):
        def fuc_1():
            x = input("请输入密码:")#此处添加权限验证
            if x == pwd:
                fuc()#密码正确才能调用该函数
            else:
                print("密码错误,登录失败")#f否则提示密码错误
        return fuc_1
    return get_fuc


@get_fucc(pwd = "111111")    #等同于test = get_fuc(test)#这是一个语法糖,所以装饰器里不能返回fuc_1()
def test():
    print("欢迎回来")
PS:如果要对类中的方法进行装饰,则装饰函数应该写在类前面!
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容