Comment écrire une simple fonction de rappel?
Python 2.7.10
J'ai écrit le code suivant pour tester une simple fonction de rappel.
def callback(a, b):
print('Sum = {0}'.format(a+b))
def main(callback=None):
print('Add any two digits.')
if callback != None:
callback
main(callback(1, 2))
Je reçois quand je l'exécuter:
Sum = 3
Add any two digits.
Pourquoi Add any two digits
est après Sum = 3
? Je suppose que c'est parce que la fonction de rappel qui s'exécute en premier. Comment faire pour exécuter la fonction de rappel après tout autre code dans main()
exécuté?
Vous devez vous connecter pour publier un commentaire.
callback
sur sa propre n'est pas faire n'importe quoi. Elle accepte des paramètres.Le fait que vous n'avez
callback(1, 2)
premier va appeler cette fonction, ainsi l'impressionSum = 3
.Depuis
callback
ne retourne pas de valeur explicite, il est retourné commeNone
, de sorte que votre code est équivalent àVous pourriez essayer de ne pas l'appel de la fonction, au début, et juste en passant sa poignée.
main
.Comme mentionné dans les commentaires, votre callback n'est appelé à chaque fois qu'il est suffixé à ouvrir et fermer les parenthèses; par conséquent, il est appelé lorsque vous le passez.
Vous pourriez vouloir utiliser une lambda et le passer dans les valeurs.
Voici ce que tu voulais faire :
Le problème, c'est que vous êtes à l'évaluation de la fonction de rappel avant de vous passer un appelable. Un moyen souple de résoudre le problème serait celui-ci:
Optionnellement, vous voudrez peut-être inclure un moyen de soutenir les arguments mots-clefs.
Votre code est exécuté comme suit:
callback
fonction est appelée avec(1, 2)
et il retourneNone
(Sans instruction de retour, votre fonction imprimeSum = 3
et retourneNone
)main
fonction est appelée avecNone
comme argument (Donccallback != None
sera toujoursFalse
)