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.
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.
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.
Recommended Posts