J'essaie de comprendre les décorateurs en python. Je ne comprends pas pourquoi ce qui suit ne fonctionne pas:Pourquoi ce décorateur python ne fonctionne-t-il pas?
def decorator(func):
def logger(*args, **kwargs):
print "start logging"
func(*args, **kwargs)
print "end logging"
return logger
@decorator
def add(a,b):
return a+b
Si j'appelle add(2,3)
la sortie sera:
start logging
end logging
Cependant, si je modifie mon code et écrire return func(*args, **kwargs)
dans la définition de logger
cela fonctionne mais end logging
n'est pas écrit sur la sortie.
Une fonction se termine lorsque vous 'return' ... Affectez le résultat de l'appel de la fonction, * puis * print, * puis * renvoyez ce résultat. – jonrsharpe
La fonction 'logger' * doit * renvoyer la valeur de' func', mais elle ne peut pas le faire avant la fin. Maintenant, réfléchissez un peu, comment pourriez-vous enregistrer le résultat de l'appel 'func', afin de pouvoir le renvoyer plus tard? –