裝飾器
- 本質是一個接受引數為函式的函式。
- 作用:向已實現的方法新增附加的通用函式,如日誌記錄和執行計時。
不帶引數的裝飾器,不用@
# 不帶引數的裝飾器 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")
相當於在 do_something 函式外面套了兩個輸出:before function 和 after function。#輸出 before function 1 2 3 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")
相當於執行 do_something 函式的時候,因為有 @ 的原因,已經知道有一層裝飾器 deco_test,所以不需要再單獨寫 deco_test(do_something) 了。#輸出 before function 1 2 3 after function
在函式do_something()
外面先套一層deco_test()
裝飾器,再在最外面套一層logging()
裝飾器。
本作品採用《CC 協議》,轉載必須註明作者和本文連結