Python裝飾器是Python語言中一種高級的語法特性,它允許我們在不改變原有代碼的前提下,為現(xiàn)有的函數(shù)或類添加額外的行為。裝飾器的使用非常靈活,它可以實現(xiàn)各種高級的功能,例如日志記錄、性能分析、權(quán)限控制等。
# 基本的裝飾器示例 def square(func): def wrapper(*args, **kwargs): print("將調(diào)用函數(shù):%s" % func.__name__) return func(*args, **kwargs) ** 2 return wrapper @square def add(x, y): return x + y print(add(2, 3)) # 輸出 25 # 結(jié)果為 5 的平方,也就是 25 # 裝飾器的順序 def deco1(func): def wrapper(*args, **kwargs): print("deco1") return func(*args, **kwargs) return wrapper def deco2(func): def wrapper(*args, **kwargs): print("deco2") return func(*args, **kwargs) return wrapper @deco1 @deco2 def foo(): print("hello world") foo() # 輸出 # deco1 # deco2 # hello world
在上面的代碼中,我們定義了兩個裝飾器 deco1 和 deco2,然后使用 @ 符號將它們裝飾到 foo 函數(shù)上。注意,裝飾器的執(zhí)行順序是從上往下,也就是先執(zhí)行 deco2,再執(zhí)行 deco1。這就意味著,如果有多個裝飾器,它們的執(zhí)行順序非常重要。
除了函數(shù)裝飾器之外,Python 還支持類裝飾器和參數(shù)化裝飾器。類裝飾器可以對類進行裝飾,參數(shù)化裝飾器在裝飾器內(nèi)部可以接收參數(shù),這使得裝飾器變得更加靈活。