关于 Python 装饰器的一些理解

装饰器

  1. 本质是一个接受参数为函数的函数。
  2. 作用:向已实现的方法添加附加的通用函数,如日志记录和运行计时。
    不带参数的装饰器,不用@
    # 不带参数的装饰器
    def deco_test(func):
    def wrapper(*args, **kwargs):
        print("before function")
        f = func(*args, **kwargs)
        print("after function")
        return f
    return wrapper
    def do_something(a,b,c):
    print(a)
    time.sleep(1)
    print(b)
    time.sleep(1)
    print(c)
    return a
    if __name__ == '__main__':
    # 不用@
    f = deco_test(do_something)("1","2","3")
    #输出
    before function
    1
    2
    3
    after function
    相当于在 do_something 函数外面套了两个输出:before function 和 after function。
    # 不带参数的装饰器
    def deco_test(func):
    def wrapper(*args, **kwargs):
        print("before function")
        f = func(*args, **kwargs)
        print("after function")
        return f
    return wrapper
    @deco_test
    def do_something(a,b,c):
    print(a)
    time.sleep(1)
    print(b)
    time.sleep(1)
    print(c)
    return a
    if __name__ == '__main__':
    # 使用@
    f = do_something("1","2","3")
    #输出
    before function
    1
    2
    3
    after function
    相当于执行 do_something 函数的时候,因为有 @ 的原因,已经知道有一层装饰器 deco_test,所以不需要再单独写 deco_test(do_something) 了。
    在函数 do_something() 外面先套一层 deco_test() 装饰器,再在最外面套一层 logging() 装饰器。
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!