Python中的裝飾器是一種很有用的函數修飾工具,它可以動態地改變函數的行為。但是,裝飾器在函數定義前、函數定義后或函數中定義,具體運行的時候會有所不同。
# 裝飾器定義在函數定義前 def deco(func): def wrapper(*args, **kwargs): print("before exec") res = func(*args, **kwargs) print("after exec") return res return wrapper @deco def my_func(): print("executing my_func()") my_func() # 輸出: # before exec # executing my_func() # after exec # 裝飾器定義在函數定義后 @deco def my_func(): print("executing my_func()") my_func() # 輸出: # before exec # executing my_func() # after exec def my_func(): @deco def wrapper(): print("executing my_func()") return wrapper my_func()() # 輸出: # before exec # executing my_func() # after exec
當裝飾器定義在函數定義前或后時,執行順序與定義順序相同。裝飾器定義在函數中時,需要記得返回內部函數。實際中,裝飾器的位置要根據實際需求而定。