tft每日頭條

 > 科技

 > python裝飾器簡明教程

python裝飾器簡明教程

科技 更新时间:2025-02-12 11:08:53

之前的文章已經介紹了裝飾器,它本質也是一個方法,隻不過它的入參也是一個方法,返回的也是一個方法,目的就是能夠對傳入的方法做前置或後置的處理。見下圖,func被decorator裝飾後實際上已經變成了另外一個方法。

python裝飾器簡明教程(python裝飾器創建帶參數的裝飾器)1

裝飾器如何帶參數

下面是一個簡單的示例,本身沒有什麼意義,隻是為了聚焦帶參數的裝飾器本身,唯一不太好理解的就是logged方法中又嵌套定義了兩個方法decorate、wrapper,python中一切都是對象,既然方法内部可以定義數組、數字、字符串等,那麼定義方法也沒有什麼不可以的,因為它們都是python對象,暫時不理解也不要過于糾結,承認這樣做是可以的就是了。

from functools import wraps def logged(message="帶參數的裝飾器"): def decorate(func): @wraps(func) def wrapper(*args, **kwargs): print(message) return func(*args, **kwargs) return wrapper return decorate # 使用默認參數 @logged() def add(x, y): return x y @logged("這是一個裝飾器傳入的參數") def spam(): print('Spam!') add(3,4) spam()

實際執行結果如下,我們看到被logged裝飾後的方法add、spam執行後分别打印了logged默認的message值和指定的message值,實現了裝飾器攜帶參數。

python裝飾器簡明教程(python裝飾器創建帶參數的裝飾器)2

如果我們隻關注logged内部的decorate方法就會發現,它和之前介紹的無參數的裝飾器非常相似,而使用裝飾器的方法如@logged()實際上就是對logged方法進行了調用,返回的就是decorate方法。參見下圖,logged(mesaage)調用的返回結果就相當于開頭的decorator方法,它接受func作為參數。

python裝飾器簡明教程(python裝飾器創建帶參數的裝飾器)3

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved