Neue Funktionen in Python 3.4.0 (3) - Generische Funktionen für den Einzelversand

Heute gibt es generische Single-Dispatch-Funktionen (PEP-443). Die generische Funktion wird häufig als generische Funktion übersetzt, jedoch je nach Sprache leicht unterschiedlich verwendet. In Python scheint es zu bedeuten, "mehreren Funktionen, die sich je nach Art des Arguments unterschiedlich verhalten, den gleichen Namen zu geben".

Ich verstehe überhaupt nicht, selbst wenn ich schreibe, also gebe ich Ihnen ein Beispiel. Stellen Sie sich eine Funktion vor, deren Ausgabe je nach Argumenttyp unterschiedlich ist. Es sieht so aus, ohne generische Funktionen zu verwenden.

def print_func(arg):
    arg_type = type(arg)
    if arg_type is int:
        print("found integer:", arg)
    elif arg_type is list:
        print("found list:", arg)
    else:
        print("found something:", arg)

print_func(1)
print_func(['a','b','c'])
print_func(1.23)

Prozess, während der Typ des Eingabearguments einzeln mit der if-Anweisung überprüft wird. Das Ausführungsergebnis ist wie folgt.

found integer: 1
found list: ['a', 'b', 'c']
found something: 1.23

Wenn Sie dies mit generischen Single-Dispatch-Funktionen schreiben, wird es so sein.

from functools import singledispatch

@singledispatch
def print_func(arg):
    print("found something:", arg)

@print_func.register(int)
def _(arg):
    print("found integer:", arg)

@print_func.register(list)
def _(arg):
    print("found list:", arg)

print_func(1)
print_func(['a','b','c'])
print_func(1.23)

Es fühlt sich an, als würde man die Basisfunktion mit einem einzigen Patch-Dekorator ändern und ihm mithilfe der Registermethode eine Verarbeitung für jeden Typ hinzufügen. Welches besser ist, ist subtil, aber wenn die Verarbeitung für jeden Typ länger wird, kann dies sauberer sein, als es in eine if-Anweisung zu setzen.

Das Ergebnis ist das gleiche wie oben, daher wird es weggelassen.

Aber ich kann mir keinen Nutzen vorstellen. Es ist üblich, einen bestimmten Wert zu sehen und ihn zu versenden, beispielsweise das Parsen einer solchen Datengruppe, da das Format der folgenden Daten aus dem Wert von Header bekannt sein kann. In einem solchen Fall wird dies häufig durch die Erstellung eines Diktats realisiert, das eine Funktion vom Wert subtrahiert, dies ist jedoch ein Typ.

Recommended Posts

Neue Funktionen in Python 3.4.0 (3) - Generische Funktionen für den Einzelversand
Was ist neu in Python 3.5?
Neu in Python 3.4.0 (1) --pathlib
Was ist neu in Python 3.6?
Was ist neu in Python 3.10 (Zusammenfassung)
Überschreiben Sie Bibliotheksfunktionen in Python
Neu in Python 3.4.0 (2) --enum
Was ist neu in Python 3.9 (Zusammenfassung)
Python-Funktionen mit Chemoinfomatik gelernt
[Python] Verwalten Sie Funktionen in einer Liste
Neu in Python3.9 Wörterbücher zusammenführen
Verwendung globaler Variablen in Python-Funktionen
Definieren Sie Funktionen (Methoden) in Python dynamisch
Neue Python-Grammatik und Funktionen, die im Einführungsbuch nicht erwähnt werden
Python-Funktionen
Neue Funktionen in Python 3.9 (1) - Der Summensatzoperator kann im Wörterbuchtyp verwendet werden.
Was ist neu in Python 3.9 (2) -Sortierte nicht verteilte Diagramme in Python
[Python3] Definieren Sie globale Variablen in einer Funktion dynamisch
Verwenden Sie einfach Ihre eigenen Funktionen in Python
Szenenerkennung nach GIST-Feature-Quantität in Python
[Tipps] Leicht lesbares Schreiben beim Verbinden von Funktionen in Python
Quadtree in Python --2
Python in der Optimierung
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
SendKeys in Python
Epoche in Python
Zwietracht in Python
Deutsch in Python
DCI in Python
Quicksort in Python
nCr in Python
N-Gramm in Python
Programmieren mit Python
Konstante in Python
Verwenden Sie verschiedene Rabbimq-Funktionen mit Python Pika
Ich habe einige der neuen Funktionen von Python 3.8 touched angesprochen
# Python-Grundlagen (Funktionen)
FizzBuzz in Python
SQLite in Python
[Anfänger] Python-Funktionen
Schritt AIC in Python
Erstellen Sie eine neue Seite im Zusammenfluss mit Python
Holen Sie sich die Datei, Funktion, Zeilennummer in Python ausgeführt
LINE-Bot [0] in Python
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
Konstante in Python
nCr in Python.
Format in Python
Scons in Python 3
Puyopuyo in Python
Python in Virtualenv
PPAP in Python
Python Einfach zu bedienende Funktionen