[PYTHON] Was ist eine Rückruffunktion?

■ Was ist eine Rückruffunktion?

Eine Funktion, die als Argument an eine andere Funktion übergeben wird.

Das Beispiel der C-Sprache auf der folgenden Site ist leicht zu verstehen. Eine Rückruffunktion wird dem Funktionszeiger zugewiesen und als Argument übergeben.

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

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

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

//Rückruffunktion 2
void callback2(char *s){
    printf("[");
    printf("%s",s);
    printf("].\n");
}

//Eine Funktion, die eine Rückruffunktion aufruft
void func(char *s,FUNC_POINTER p){
    //Rufen Sie die Rückruffunktion auf
    p(s);
}

int main(){
    FUNC_POINTER p;

    p = callback1;
    //Rückruffunktion 1
    func("Cobuck-Funktion 1",p);

    p = callback2;
    //Rückruffunktion 2
    func("Cobuck-Funktion 2",p);
    return 0;
}

Ausführungsergebnis.

Cobuck-Funktion 1
[Cobuck-Funktion 2].

■ Python-Beispiel

Ein Beispiel für die Verwendung einer Rückruffunktion in Python. Es scheint, dass die Funktion, die die Rückruffunktion aufruft, häufig als Handler ↓ bezeichnet wird

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

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

Als Fluss,

  1. Definieren Sie einen Handler
  2. Definieren Sie eine Rückruffunktion
  3. Weisen Sie dem Funktionszeiger die Rückruffunktion zu
  4. Übergeben Sie den Funktionszeiger als Argument an den Handler
# -*- 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__":

   #Rückruffunktionszuweisung
   call = callback1
   #Handler-Ausführung:Rückruffunktion
   handler(call, "message1")

   #Rückruffunktionszuweisung
   call = callback2
   #Handler-Ausführung:Rückruffunktion
   handler(call, "message1", "message2")

Ausführungsergebnis.

message1
message1, message2

■ Klasse verwenden

Das Mitglied "func" in der Klasse hat eine Variable, die als Funktionszeiger fungiert, aber im Grunde wird das Gleiche getan.

  1. Definieren Sie eine Klasse, die als Handler fungiert
# -*- 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__":

    #
    callback = Callbacker(callback1)
    print (type(callback.func))
    print ("callback.func "),
    print (callback.func)
    print ("callback1     "),
    print (callback1)
    #2. Definieren Sie eine Methode, die als Handler fungiert. 2. Definieren Sie eine Rückruffunktion. 3. Weisen Sie einem Funktionszeiger eine Rückruffunktion zu. 4. Übergeben Sie einen Funktionszeiger als Handlerargument. Rückruffunktionszuweisung Handlerausführung:Rückruffunktion
    callback.handler("message1")
    print ("")

    #Rückruffunktionszuweisung
    callback.func = callback2
    print (type(callback.func))
    print ("callback.func "),
    print (callback.func)
    print ("callback2     "),
    print (callback2)
    #Handler-Ausführung:Rückruffunktion
    callback.handler("message1", "message2")

Ausführungsergebnis

<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

■ Zusammenfassung

Eine Rückruffunktion ist eine Funktion, die als Argument an eine andere Funktion übergeben wird.

Grundsätzlich

  1. Definieren Sie einen Handler
  2. Definieren Sie eine Rückruffunktion
  3. Weisen Sie dem Funktionszeiger die Rückruffunktion zu
  4. Übergeben Sie den Funktionszeiger als Argument an den Handler

Recommended Posts

Was ist eine Rückruffunktion?
Was ist die Rückruffunktion?
[Python] Was ist eine Zip-Funktion?
Was ist eine Distribution?
Was ist ein Terminal?
Was ist ein Hacker?
Was ist ein Zeiger?
Was ist die Aktivierungsfunktion?
Was ist ein Entscheidungsbaum?
Was ist ein Kontextwechsel?
Was ist ein Superuser?
Was ist ein Systemaufruf?
[Definition] Was ist ein Framework?
[Python] Was ist eine with-Anweisung?
Was ist ein lexikalischer / dynamischer Bereich?
Was ist das Convolutional Neural Network?
Was ist ein Namespace?
Was ist copy.copy ()
Was ist dotenv?
Was ist Linux?
Was ist klass?
Was ist SALOME?
Was ist ein Hund? Django-Installationsvolumen
Was ist ein Hund? Python-Installationsvolumen
Was ist Linux?
Was ist Linux?
Was ist Pyvenv?
Was ist __call__?
Was ist Linux?
Was ist Python?
Was ist ein Hund? Django - Erstellen Sie ein benutzerdefiniertes Benutzermodell
Was ist ein Hund? Fordern Sie die Django-Vorlage heraus! Volumen
Es ist ein Mac. Was ist der Linux-Befehl Linux?
Was ist ein Hund? Django - Erstellen Sie ein benutzerdefiniertes Benutzermodell 2
Sag mir, was eine gleichwinklige Abbildung ist, Python!
Was ist Piotroskis F-Score?
Was ist Raspberry Pi?
[Python] Was ist Pipeline ...
Was ist das Calmar-Verhältnis?
[PyTorch Tutorial ①] Was ist PyTorch?
Unterscheiden Sie eine Funktion mit zwei Variablen
Machen Sie einen Funktionsdekorateur
Was ist JSON? .. [Hinweis]
Wofür ist Linux?
Was ist Ensemble-Lernen?
Was ist TCP / IP?
Was ist Pythons __init__.py?
Was ist UNIT-V Linux?
[Python] Was ist virtualenv?
Was ist maschinelles Lernen?
Was ist ein Hund? POST-Übertragungsvolumen mit Django--forms.py
Was ist ein Hund? Startvolumen der Django-App erstellen --startapp
Was ist ein Hund? Django App Creation Start Volume - Startprojekt
Was ist ein empfohlener Motor? Zusammenfassung der Typen
Was ist Gott? Erstelle einen einfachen Chatbot mit Python
[Python] Stellen Sie sicher, dass die empfangene Funktion eine benutzerdefinierte Funktion ist
Für mich als Django-Anfänger (2) - Was ist MTV?
Was bedeutet das letzte () in einer Funktion in Python?
Was ist der Unterschied zwischen symbolischen und harten Links?