简单回顾一下python 装饰器。

Python 装饰器(Decoratar)存在的意义就是再不改变原有函数的情况下,给函数增加功能。

直接通过代码以及相应的注释来展示。

def fnname_dec(fn):
    def wapper(*args, **kwargs):  # 为什么wapper 要接收参数呢。 因为被装饰后的函数其实就是wapper,
        # 然后要接受被装饰后的函数speak的参数供原来的speak函数使用来达到不影响原函数的功能。
        print("My name is " + fn.__name__)
        return fn(*args, **kwargs)
    return wapper


# @fanname_dec
def speak(word):
    print("i say:" + word)
    return "speak"


if __name__ == "__main__":
    speak = fnname_dec(speak)  # 这句话的功能与@fanname_dec 这个语法糖是一样的。 当执行fnname_dec(speak)的时候,
    # 就像当于执行了wapper函数,因为fnname_dec 的返回值是wapper 是这个函数而不是某个值。
    speak("haha")  # 就相当于wapper("haha"), 而wapper的返回值是原来speak的返回值,并且在返回的时候执行了 speak()函数
    # 所以也就到达了不修改原来函数的情况下 给原有的函数增加了功能。
    # print(speak.__name__)  ==> wapper 其实现在的函数根本就是wapper函数,只是被赋予了原函数的名字而已

  

原文地址:https://www.cnblogs.com/dg-blog/p/12023602.html