[PYTHON] Qu'est-ce qu'une fonction de rappel?

■ Qu'est-ce qu'une fonction de rappel?

Une fonction qui est passée en argument à une autre fonction.

L'exemple du langage C sur le site suivant est facile à comprendre. Une fonction de rappel est affectée au pointeur de fonction et passée en argument.

http://shiroibanana.blogspot.jp/2012/09/callback.html

#include<stdio.h>
typedef void (* FUNC_POINTER)(char *); 

//Fonction Cobuck 1
void callback1(char *s){
    printf("%s\n",s);
}

//Fonction de rappel 2
void callback2(char *s){
    printf("[");
    printf("%s",s);
    printf("].\n");
}

//Une fonction qui appelle une fonction de rappel
void func(char *s,FUNC_POINTER p){
    //Appeler la fonction de rappel
    p(s);
}

int main(){
    FUNC_POINTER p;

    p = callback1;
    //Appeler la fonction de rappel 1
    func("Fonction Cobuck 1",p);

    p = callback2;
    //Appeler la fonction de rappel 2
    func("Fonction Cobuck 2",p);
    return 0;
}

Résultat de l'exécution.

Fonction Cobuck 1
[Fonction Cobuck 2].

■ Exemple Python

Un exemple d'utilisation d'une fonction de rappel en python. Il semble que la fonction qui appelle la fonction de rappel soit souvent décrite comme gestionnaire ↓

def handler(func,*args):
    return func(*args)

http://www.phactory.jp/cms/blog/post/admin/2010/02/python_funcpointer/

En tant que flux,

  1. Définissez un gestionnaire
  2. Définissez une fonction de rappel
  3. Attribuez la fonction de rappel au pointeur de fonction
  4. Passez le pointeur de fonction comme argument au gestionnaire
# -*- coding: utf-8 -*-
def handler(func,*args):
    return func(*args)

def callback1(message1):
    print("%s" % message1)

def callback2(message1, message2):
    print("%s, %s" % ( message1, message2) )

# main
if __name__ == "__main__":

   #Affectation de la fonction de rappel
   call = callback1
   #Exécution du gestionnaire:Fonction de rappel
   handler(call, "message1")

   #Affectation de la fonction de rappel
   call = callback2
   #Exécution du gestionnaire:Fonction de rappel
   handler(call, "message1", "message2")

Résultat de l'exécution.

message1
message1, message2

■ Utiliser la classe

Le membre "func" dans la classe a une variable qui agit comme un pointeur de fonction, mais fondamentalement la même chose est faite.

  1. Définissez une classe qui joue le rôle de gestionnaire
  2. Définissez un membre à traiter comme un pointeur de fonction
  3. Définissez une méthode qui joue le rôle de gestionnaire
  4. Définissez une fonction de rappel
  5. Attribuez la fonction de rappel au pointeur de fonction
  6. Passez le pointeur de fonction comme argument au gestionnaire
# -*- coding: utf-8 -*-
class Callbacker():
    def __init__(self, func):
        self.func = func

    def handler(self, *args):
        self.func(*args)

def callback1(message1):
    print '%s' % message1

def callback2(message1, message2):
    print("%s, %s" % ( message1, message2) )

# main
if __name__ == "__main__":

    #Affectation de la fonction de rappel
    callback = Callbacker(callback1)
    print (type(callback.func))
    print ("callback.func "),
    print (callback.func)
    print ("callback1     "),
    print (callback1)
    #Exécution du gestionnaire:Fonction de rappel
    callback.handler("message1")
    print ("")

    #Affectation de la fonction de rappel
    callback.func = callback2
    print (type(callback.func))
    print ("callback.func "),
    print (callback.func)
    print ("callback2     "),
    print (callback2)
    #Exécution du gestionnaire:Fonction de rappel
    callback.handler("message1", "message2")

Résultat d'exécution

<type 'function'>
callback.func  <function callback1 at 0x7fcff9c8a9b0>
callback1      <function callback1 at 0x7fcff9c8a9b0>
message1

<type 'function'>
callback.func  <function callback2 at 0x7fcff9c8ab18>
callback2      <function callback2 at 0x7fcff9c8ab18>
message1, message2

■ Résumé

Une fonction de rappel est une fonction qui est passée comme argument à une autre fonction.

Fondamentalement

  1. Définissez un gestionnaire
  2. Définissez une fonction de rappel
  3. Attribuez la fonction de rappel au pointeur de fonction
  4. Passez le pointeur de fonction comme argument au gestionnaire

Recommended Posts

Qu'est-ce qu'une fonction de rappel?
Qu'est-ce que la fonction de rappel?
[Python] Qu'est-ce qu'une fonction zip?
Qu'est-ce qu'une distribution?
Qu'est-ce qu'un terminal?
Qu'est-ce qu'un hacker?
Qu'est-ce qu'un pointeur?
Quelle est la fonction d'activation?
Qu'est-ce qu'un arbre de décision?
Qu'est-ce qu'un changement de contexte?
Qu'est-ce qu'un super utilisateur?
Qu'est-ce qu'un appel système
[Définition] Qu'est-ce qu'un cadre?
[Python] Qu'est-ce qu'une instruction with?
Qu'est-ce qu'une portée lexicale / une portée dynamique?
Qu'est-ce que le réseau neuronal convolutif?
Qu'est-ce que l'espace de noms
Qu'est-ce que copy.copy ()
Qu'est-ce que dotenv?
Qu'est-ce que Linux
Qu'est-ce que le klass?
Qu'est-ce que SALOME?
Qu'est-ce qu'un chien? Volume d'installation de Django
Qu'est-ce qu'un chien? Volume d'installation Python
Qu'est-ce que Linux?
Qu'est-ce que Linux
Qu'est-ce que pyvenv
Qu'est-ce que __call__
Qu'est-ce que Linux
Qu'est-ce que Python
Qu'est-ce qu'un chien? Django - Créer un modèle utilisateur personnalisé
Qu'est-ce qu'un chien? Défiez le modèle Django! Le volume
C'est un Mac. Qu'est-ce que la commande Linux Linux?
Qu'est-ce qu'un chien? Django - Créer un modèle utilisateur personnalisé 2
Dites-moi ce qu'est une cartographie équiangulaire, Python!
Qu'est-ce que le F-Score de Piotroski?
Qu'est-ce que Raspberry Pi?
[Python] Qu'est-ce que Pipeline ...
Qu'est-ce que Calmar Ratio?
[Tutoriel PyTorch ①] Qu'est-ce que PyTorch?
Différencier une fonction à deux variables
Faire un décorateur de fonction
Qu'est-ce que JSON? .. [Remarque]
À quoi sert Linux?
Qu'est-ce que l'apprentissage d'ensemble?
Qu'est-ce que TCP / IP?
Qu'est-ce que __init__.py de Python?
Qu'est-ce que UNIT-V Linux?
[Python] Qu'est-ce que virtualenv
Qu'est-ce que l'apprentissage automatique?
Qu'est-ce qu'un chien? Volume de transmission POST à l'aide de Django--forms.py
Qu'est-ce qu'un chien? Volume de démarrage de la création de l'application Django --startapp
Qu'est-ce qu'un chien? Volume de démarrage de la création de l'application Django - startproject
Qu'est-ce qu'un moteur de recommandation? Résumé des types
Qu'est-ce que Dieu? Créez un chatbot simple avec python
[Python] Assurez-vous que la fonction reçue est une fonction définie par l'utilisateur
Pour moi en tant que débutant Django (2) - Qu'est-ce que MTV?
Que signifie le dernier () dans une fonction en Python?
Quelle est la différence entre les liens symboliques et les liens durs?