• 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()   

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

             我是一个基本函数

             我是增加的功能二

  • 相关阅读:
    PyQt5对话框
    PyQt5基础控件
    PyQt5主界面
    PyQt5入门
    ioctl太多虚拟内存不够用
    code principles
    Error: watch ENOSPC
    intelJ
    cas
    C的函数指针的作用,以及其赋值是弱类型的
  • 原文地址:https://www.cnblogs.com/cxstudypython/p/12142951.html
Copyright © 2020-2023  润新知