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
Barbara StreisandOriginal
2024-10-17 17:00:03975Durchsuche

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>

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>

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!

Stellungnahme:
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