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