Heim > Backend-Entwicklung > Python-Tutorial > Wie behält man Funktionssignaturen mit Python-Dekoratoren bei?

Wie behält man Funktionssignaturen mit Python-Dekoratoren bei?

Barbara Streisand
Freigeben: 2024-10-17 17:00:03
Original
985 Leute haben es durchsucht

How to Preserve Function Signatures with Python Decorators?

Funktionssignaturen mit Dekoratoren beibehalten

Dekoratoren sind ein leistungsstarkes Werkzeug in Python, können aber auch Probleme mit dekorierten Funktionssignaturen verursachen. Um die Signatur der ursprünglichen Funktion beizubehalten, ziehen Sie die folgenden Ansätze in Betracht:

Ansatz 1: Decorator-Modul

Installieren Sie das Decorator-Modul (pip install decorator) und passen Sie Ihren Decorator an die Verwendung an seine @decorator.decorator-Syntax:

<code class="python">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)</code>
Nach dem Login kopieren

Ansatz 2: functools.wraps() (Python 3.4)

Python 3.4 führte functools.wraps() ein, das bewahrt Funktionssignaturen:

<code class="python">import functools

def args_as_ints(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        args = [int(x) for x in args]
        kwargs = dict((k, int(v)) for k, v in kwargs.items())
        return func(*args, **kwargs)
    return wrapper</code>
Nach dem Login kopieren

Beide Ansätze bewahren effektiv die Funktionssignatur nach der Dekoration. Darüber hinaus kann functools.wraps() für die Kompatibilität mit älteren Python-Versionen verwendet werden.

Das obige ist der detaillierte Inhalt vonWie behält man Funktionssignaturen mit Python-Dekoratoren bei?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage