關於 Python 裝飾器的一些理解

Chuzilun發表於2020-12-15

裝飾器

  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 協議》,轉載必須註明作者和本文連結

相關文章