• Python


    1.什么叫函数装饰器?

        装饰器(Decorators)是 Python 的一个重要部分。

        简单地说:他们是修改其他函数的功能的函数,他们有助于让我们的代码更简短,更有范!

        也可以说是:为了增加功能而对函数或者类进行功能扩充的一种语法。就像女孩化妆一样,女孩还是那个女孩,但是化妆过后更加漂亮了~

    2.用代码来描述:

        首先我们声明一个基本函数,然后调用函数:

    # 声明一个基本函数
    def test1():
        print('我是一个基本函数')
        
    # 调用函数
    test1()

        运行后会输出: 我是一个基本函数

        我们需要在这个基本函数的输出前后添加一些功能:

    # 声明一个基本函数
    def test():
        print('我是一个基本函数')
    
    
    # 定义一个给test函数增加功能的函数
    def func2(func):
        # 增加功能一
        print('我是增加的功能一')
        # 调用基本功能,这里如果需要调用基本功能,我们需要把基本函数作为参数传递给func2
        func()          # 相当于调用test函数
        # 增加功能二
        print('我是增加的功能二')
    
    
    # 将基本函数作为参数传递给func2,并且调用func2
    func2(test)

        运行后会输出: 我是增加的功能一

                我是一个基本函数

                我是增加的功能二

        但是,这样我们是运行的增加功能的函数,并非我们最开始的基本函数test,因此我们需要在func2函数里再定义一个函数,把tset函数传递进去,然后返回定义的这个函数;

        说着可能有点迷糊,我们看一下代码就懂了

    # 声明一个基本函数
    def test():
        print('我是一个基本函数')
    
    
    # 定义一个给test函数增加功能的函数
    def func2(func):
        def infunc():
            # 增加功能一
            print('我是增加的功能一')
            # 调用基本功能,这里如果需要调用基本功能,我们需要把基本函数作为参数传递给func2
            func()          # 相当于调用test函数
            # 增加功能二
            print('我是增加的功能二')
        # 这里infunc不能加(),加()后就会变成调用infunc函数
        # 返回一个函数,这里返回的函数就是我们未来添加好功能的函数,即具备基本函数也具备增加功能的函数
        return infunc
    
    
    # 装饰操作
    test = func2(test)
    # 调用装饰后的test函数
    test()

        运行结果:我是增加的功能一

             我是一个基本函数

             我是增加的功能二

        这就是我们想要的功能呀!这也就装饰器的原理,但是我们需要用装饰器的语法来写;

        这里可能有人没看懂    装饰操作 :test = func2(test)   这里func2(test)的返回值返回的是函数infunc,类似下面的代码,可以自己运行下:

    def test():
        print('hello,python')
    
    
    func = test
    func()

        用装饰器语法来写上面的函数:

    # 定义一个给test函数增加功能的函数
    def func2(func):
        def infunc():
            # 增加功能一
            print('我是增加的功能一')
            # 调用基本功能,这里如果需要调用基本功能,我们需要把基本函数作为参数传递给func2
            func()  # 相当于调用test函数
            # 增加功能二
            print('我是增加的功能二')
    
        # 这里infunc不能加(),加()后就会变成调用infunc函数
        # 返回一个函数,这里返回的函数就是我们未来添加好功能的函数,即具备基本函数也具备增加功能的函数
        return infunc
    
    
    # 装饰操作
    @func2  # 等价于test = func2(test)
    # 声明一个基本函数
    def test():
        print('我是一个基本函数')
    
    
    # 调用装饰后的test函数
    test()   

        运行结果:我是增加的功能一

             我是一个基本函数

             我是增加的功能二

  • 相关阅读:
    生成错误:对路径".dll"的访问被拒绝
    实现一个类似于收趣APP的功能
    使用Jquery.form.js ajax表单提交插件弹出下载提示框
    关于Mysql错误:./bin/mysqld_safe --user=mysql& [1] 32710 121003 16:40:22 mysqld_safe Logging to '/var/log/mysqld.log'. 121003 16:40:22 mysqld_s
    Linux下更新时间
    关于轻松安装LNMP和LAMP的编译环境
    LAMP环境CentOS6.4 PHP5.4随笔未整理
    论Linux运维的一些基础安全知识和简单办法
    shell脚本笔记(原创不断记录)
    MySQL创建一个用户,指定一个数据库 授权
  • 原文地址:https://www.cnblogs.com/cxstudypython/p/12142951.html
Copyright © 2020-2023  润新知