當我嘗試製作測試裝飾器時,發現了一個奇怪的實例。像這樣的代碼:是由args或kwargs接受的python參數的默認值嗎?
def doublefunc(fn):
def warpped(*arg, **kwargs):
arg = (i if type(i) is not int else i*2 for i in arg)
for k, v in kwargs.iteritems():
kwargs[k] = v *2 if type(v) is int else v
return fn(*arg, **kwargs)
return warpped
@doublefunc
def add(x, y, m, z=10, v='bbaa'):
print 'x=%s, y=%s, m=%s, z=%s, v=%s' % (x, y, m, z, v)
return x + y + z
當我打電話功能是這樣的:
print add(1, 1, 'teststring')
返回的值是但不是24.這意味着參數ž的功能添加默認值,在裝飾器功能內不接受。爲什麼?
'print add(1,'teststring')'返回** 12 **!這是正確的!你確定你收到** 14 **嗎?你爲什麼期望24? – EbraHim
@EbraHim它在我的電腦上返回14(Python 2.7,Ubuntu Kylin)。你在使用Python 3嗎? –
對不起,我的錯。它返回14. – EbraHim