[PYTHON] Ich habe PEP 612 (Parameter Specification Variables) gelesen.

Dies ist der zweite Teil einer Reihe von PEPs, die ich zum ersten Mal gehört habe, als ich die README-Datei von Microsoft auf Python pyright gescannt habe. Dieses Mal werde ich über PEP 612 (Parameter Specification Variables) schreiben.

Überblick

Ansatz

Fügen Sie "ParameterSpecification" als Typ hinzu, der das Argument darstellt. Die ParameterSpecification kann in Verbindung mit dem Callable verwendet werden, um sich wie die Generika eines aufrufbaren Objekts zu verhalten. Es ist leicht zu verstehen, wenn Sie es als Argumentversion von TypeVar betrachten.

Beispiel

Im folgenden Beispiel ist das Argument von "add_logging ()" vom Typ "Callable [Ps, R]", und der Rückgabewert ist auch vom Typ "Callable [Ps, R]". Das heißt, es ist ein Dekorateur, der eine Funktion mit derselben Schnittstelle wie die als Argument angegebene Funktion zurückgibt.

Daher bleibt "foo ()", dekoriert mit "@ add_logging", vom Typ "(x: int, y: str) -> int".

from typing import Callable, ParameterSpecification, TypeVar

Ps = ParameterSpecification("Ps")
R = TypeVar("R")

def add_logging(f: Callable[Ps, R]) -> Callable[Ps, R]:
    def inner(*args: Ps.args, **kwargs: Ps.kwargs) -> R:
        log_to_database()
        return f(*args, **kwargs)

    return inner


@add_logging
def foo(x: int, y: str) -> int:
    return x + 7

Es ist schwierig, diese Dekoratoren einzugeben, wenn der Typ "ParameterSpecification" nicht eingeführt wird.

Impressionen

Recommended Posts

Ich habe PEP 612 (Parameter Specification Variables) gelesen.
Ich habe PEP 613 (Explicit Type Aliases) gelesen.
Ich habe PEP 604 (Komplementäre Syntax für Union []) gelesen.
Ich habe PEP 618 gelesen (Optionale Längenprüfung zum Reißverschluss hinzufügen)
Ich habe PEP 614 (Lockerung der Grammatikbeschränkungen für Dekorateure) gelesen.
Ich habe PEP-593 gelesen (Flexible Funktion und variable Anmerkungen)
Ich las PEP-544 (Protokolle: Strukturelle Subtypisierung (statische Ententypisierung))
Ich habe PEP 585 gelesen (Type Hinting Generics In Standard Collections)
Ich habe Strangs lineare Algebra gelesen
Ich habe SHAPs Zeitung gelesen
Ich habe PEP 560 gelesen (Kernunterstützung für das Schreiben von Modulen und generischen Typen).