您好,登錄后才能下訂單哦!
本篇內容主要講解“怎么應用python裝飾器”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么應用python裝飾器”吧!
從字面意思上來看,裝飾器是用來裝飾其他東西的工具。在python中裝飾器分為函數裝飾器和類裝飾器。
簡而言之,函數裝飾器是用來裝飾函數的裝飾器,其主要目的是增加目標函數的功能,類裝飾器也就是裝飾類的裝飾器,增加類的功能。
裝飾器本質是嵌套函數
下面是一個簡單的裝飾器
# fun1為裝飾器名稱,function指的是被裝飾的函數 def fun1(function): def fun2(): print("開始了!") function() # 執行被裝飾的函數或者 或者 return function() return fun2
外面的fun1()
需要傳入一個參數,這個參數是用來傳入要被裝飾的函數,里面的fun2()
需要執行function
這個參數。
這是將函數當成參數傳入另一個函數。
使用方法:
在需要裝飾的函數上添加@裝飾器名稱
@fun1 def fun3(): print("aaa") fun3()
可以等價成這樣:
def fun3(): print("aaa") fun = fun1(fun3) fun()
輸出結果是一致的
執行結果:
開始了!
aaa
如果傳入的函數需要參數可以這樣寫:
def fun1(function): def fun2(a): print("開始了!") function(a) return fun2 @fun1 def fun3(a): print(a) fun3("aaa")
輸出結果:
開始了!
aaa
如果不清楚傳入的函數需要多少個參數,可以這樣寫:
def fun1(function): def fun2(*args, **kwargs): print("開始了!") function(*args, **kwargs) return fun2 @fun1 def fun3(a,b): print(a,b) @fun1 def fun4(a,b,c): print(a,b,c) fun3("aaa","bbb") fun4("ccc","ddd","eee")
運行結果:
開始了!
aaa bbb
開始了!
ccc ddd eee
如果函數裝飾器需要添加參數,可以這樣寫:
def fun(msg): def fun1(function): def fun2(*args, **kwargs): print("開始了!{}".format(msg)) function(*args, **kwargs) return fun2 return fun1 @fun(msg="小朋友") def fun3(a,b): print(a,b) fun3("aaa","bbb")
運行結果:
開始了!小朋友
aaa bbb
類裝飾器的用法基本和函數裝飾器一樣,只不過是用類寫的裝飾器
class fun1(object): def __init__(self, func): self.func = func def __call__(self, *args, **kwargs): print(("開始了!") self.func(*args, **kwargs) @fun1 def fun2(a,b): print(a,b) fun2("aaa","bbb")
類裝飾用到了類的__call__
方法
運行結果:
開始了!
aaa bbb
還可以這樣寫:
class fun(object): def __init__(self, msg): self.msg = msg def __call__(self, func): def fun1(*args, **kwargs): print("開始了!{0}".format(self.msg)) func(*args, **kwargs) return fun1 @fun(msg="小朋友") def fun2(a, b): print(a, b) fun2("aaa,","bbb")
運行結果:
開始了!小朋友
aaa, bbb
到此,相信大家對“怎么應用python裝飾器”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。