我使用decorator模塊來裝點一些功能。我想裝飾相當普遍,所以我允許它有任意數量的參數和關鍵字參數(只要有兩個以上參數):問題與裝飾和關鍵字參數
from decorator import decorator
def wrap(f):
return decorator(_wrap, f)
def _wrap(function, t, f, *args, **kwargs):
print 't=', t
print 'f=', f
print 'args=', args
print 'kwargs=', kwargs
@wrap
def read(a, b, c=False, d=True):
pass
read(1, 2, d=True)
的問題是,上述回報率:
t= 1
f= 2
args= (False, True)
kwargs= {}
但False
和True
來自c=
和d=
,所以不宜他們在kwargs
,即:
t= 1
f= 2
args= (,)
kwargs= {'c':False, 'd':True}
?
說我包兩個函數,''高清讀取(A,B,C =假d = True):''和def'read read2(a,b,d = False,c = True):'',你在說我無法知道c和d在_wrap裏面嗎?想象一下,如果''d =''是''verbose ='',並且我想只在verbose = True的情況下打印出_wrap中的信息 - 我可以這樣做嗎? – astrofrog
@astrofrog:你可以(如果你真的需要的話)從argspec中推斷出來(參見'inspect' stdlib模塊)。但是如果它是封裝器的信息,封裝器應該明確地將它作爲參數(並可能將它傳遞給封裝的函數)? – delnan