Erhalt von Unterschriften dekorierter Funktionen
Dekoratoren sind ein mächtiges Werkzeug zur Verbesserung der Funktionalität von Python -Funktionen. Sie können jedoch manchmal die Signatur der ursprünglichen Funktion verdecken. Dies kann für Dokumentation, Debugging und automatisierte Tools problematisch sein.
Problem:
betrachten einen generischen Dekorateur, der alle Argumente in Abgänge umgeht:
def args_as_ints(f):
def g(*args, **kwargs):
args = [int(x) for x in args]
kwargs = dict((k, int(v)) for k, v in kwargs.items())
return f(*args, **kwargs)
return g
definiten_as_ints (f):
def g (*args, ** kwargs):
args = [int (x) für x in args]
kwargs = dict ((k, int (v)) für k, v in kwargs.items ())
Rückgabe f (*args, ** kwargs)
return g Während die Dekoration wie erwartet funktioniert, wird die Unterschrift der dekorierten Funktion durch " args,
*kwargs" ersetzt, in dem Informationen über die ursprünglichen Argumente verlieren. Befriedigend:kopieren Sie die Unterschrift manuell in den Dokument.
Erstellen eines neuen Dekorators für jede bestimmte Unterschrift.
>>> help (Funny_function) Hilfe bei der Funktion Funny_function im Modul __main__: Funny_function (x, y, z = 3) Berechnet x*y 2*z
python 3.4:
import decorator
@decorator.decorator
def args_as_ints(f, *args, **kwargs):
args = [int(x) for x in args]
kwargs = dict((k, int(v)) for k, v in kwargs.items())
return f(*args, **kwargs)
functools importieren Def args_as_ints (func): @functools.wraps (func) Def -Wraper (*args, ** kwargs): args = [int (x) für x in args] kwargs = dict ((k, int (v)) für k, v in kwargs.items ()) Rückgabefunktion (*args, ** kwargs) Return Wrapper
Durch die Verwendung dieser Techniken können Dekorateure die Funktionsfunktionalität verbessern und gleichzeitig ihre ursprünglichen Unterschriften bewahren und Klarheit und Konsistenz in der Codebasis sicherstellen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3