[PYTHON] Ich habe PEP-593 gelesen (Flexible Funktion und variable Anmerkungen)
Ich habe mich entschlossen, PEP-593 (Flexible Funktion und variable Anmerkungen) im Verlauf einer Diskussion zu lesen. Notieren Sie sich daher mein Verständnis. Lass es in.
Überblick
- PEP-3107 (Funktionsanmerkungen) führte Anmerkungen in die Python-Syntax ein. Zu dieser Zeit erwähnte er Typhinweise, DB-Abfragezuordnung, RPS-Marshalling-Informationen usw. als Verwendung für Anmerkungen.
- PEP-484 (Typhinweise) führte eine Methode zum Implementieren von Typhinweisen mithilfe der Anmerkungsnotation ein. Es kann jetzt gesagt werden, dass es die Hauptverwendung von Anmerkungen ist.
- Nachdem PEP-484 zum De-facto-Standard geworden ist, ist es schwierig geworden, Anmerkungen für andere Zwecke als Typhinweise zu verwenden.
- Also werde ich die Anmerkungen neu definieren, damit ich zusätzlich zu den Typhinweisen meine eigenen Metadaten schreiben kann.
Ansatz
- Fügen Sie eine neue
typing.Annotated
hinzu
- Schreiben Sie "Annotated [T, x, y]", wenn Sie Daten oder Funktionen mit Typ T und Metadaten x, y kommentieren
- Das erste Element wird als Typ betrachtet
- Typprüfungen können auf "T" verweisen, und Tools und Bibliotheken, die Metadaten verwenden, können auf "x" und "y" verweisen.
- Mit anderen Worten, Tools und Bibliotheken ignorieren nicht unterstützte Anmerkungen
Beispiel
Numerische (fiktive) Anmerkungen im Bereich von 3 bis 10, die nach Typ als Zeichen betrachtet werden.
Annotated[int, ValueRange(3, 10), ctype("char")]
Impressionen
- Es ist schwer, "Annotated" zu schreiben. Ich wollte grob in Tupel schreiben ...
- Sie können den Inhalt der Annotation sogar zur Laufzeit abrufen (
get_type_hints ()
), sodass anscheinend Bibliotheken und Frameworks, die dies verwenden, herauskommen werden.
- Ich hoffe, dass der Code durch Missbrauch nicht chaotisch wird
- Obwohl PEP-3107 (Funktionsanmerkung) eingeführt wurde, PEP-526 (Syntax für variable Anmerkungen) Wird überhaupt nicht erwähnt. Ein erbärmliches Kind ...
- Natürlich können Sie nicht nur Funktionen, sondern auch Variablen mit Anmerkungen versehen.
- Sphinx muss auch unterstützen ...
- Ich denke, ich kann die Erklärungen von Argumenten und Variablen kommentieren, aber ich denke nicht, dass es beliebt ist, weil es umständlich zu schreiben ist.
- Ich habe ein Problem gemacht. Ich bin sicher, ich werde es morgen tun ...
def hello(name: Annotated[str, Description("Name")],
message: Annotated[str, Description("Nachrichtenformat")],
language: Annotated[str, Description("Sprache")] = "ja"
) -> Annotated[None, Description("Keiner")]:
...