Ich fand eine seltsame Instanz, wenn ich versuche, einen Dekorateur zu testen. Code wie folgt:Wird der Standardwert der Python-Parameter von args oder kwargs akzeptiert?
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
wenn ich rufe Funktion wie folgt:
print add(1, 1, 'teststring')
Der zurückgegebene Wert ist aber nicht 24, dass der Standardwert des Parameters z in Funktion Addiermittel, wird nicht in Decorator Funktion inner akzeptiert. Warum?
'print add (1, 1, 'teststring')' gibt ** 12 ** zurück! Und es ist richtig! Sind Sie sicher, dass Sie ** 14 ** erhalten haben? Warum erwartest du 24? – EbraHim
@EbraHim Es gibt 14 auf meinem Computer (Python 2.7, Ubuntu Kylin). Verwenden Sie Python 3? –
Sorry, meine Schuld. Es gibt 14. – EbraHim