[英]Python: decorate __call__ and ordinary function with the same decorator?
[英]python decorate function call
我最近了解了裝飾器,並想知道是否有可能不在某種函數定義中而是在函數調用中使用它們作為某種通用包裝器。
這樣做的原因是,我想通過用戶定義的接口從模塊調用函數,而該接口對函數執行可重復的操作,並且我不想為每個函數實現包裝器。
原則上我想
def a(num):
return num
@double
a(2)
返回4,而不需要有機會獲得實施的a
。 或者在這種情況下,像
def mutiply(factor,function,*args,**kwargs):
return factor*function(*args,*kwargs)
是更好的選擇?
Marty Alchin在Apress撰寫的Pro Python書中有非常詳細的關於裝飾器的部分。
雖然僅在函數/類定義中可以使用新樣式的@decorator語法,但是您可以使用較舊的語法,這種方式的作用相同:
from module import myfunc
myfunc = double_decorator(myfunc)
x = myfunc(2) # returns 4
您可以這樣做:
def a(num):
return num * 1
def double(f):
def wrapped(*args, **kwargs):
return f(*args, **kwargs)
return wrapped
print(double(a)(2))
這是因為我們可以使用顯式的裝飾器函數來裝飾函數並運行函數,如上例所示。 所以在這個:
print(double(a)(2))
在的地方a
你可以把任何功能和到位的2
,指定參數和kwargs。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.