J'ai lu PEP-593 (fonction flexible et annotations variables)
J'ai décidé de lire PEP-593 (Fonction flexible et annotations variables) dans le flux d'une discussion, alors notez ma compréhension. Laissez-le dedans.
Aperçu
- PEP-3107 (Annotations de fonction) a introduit des annotations dans la syntaxe Python. À ce moment-là, il a mentionné les indices de type, le mappage de requêtes de base de données, les informations de rassemblement RPS, etc. comme utilisations pour les annotations.
- PEP-484 (Type Hints) a introduit une méthode pour implémenter les indices de type en utilisant la notation d'annotation. On peut maintenant dire que c'est l'usage principal des annotations.
- Maintenant que PEP-484 est devenu la norme de facto, il est devenu difficile d'utiliser les annotations à des fins autres que les conseils de type.
- Je vais donc redéfinir les annotations afin que je puisse écrire mes propres métadonnées en plus des indices de type.
approche
- Ajouter un nouveau
typing.Annotated
- Ecrire ʻAnnotated [T, x, y] `lors de l'annotation d'une donnée ou d'une fonction de type T et de métadonnées x, y
- Le premier élément est considéré comme un type
- Les vérificateurs de type peuvent faire référence à «T», et les outils et bibliothèques qui utilisent des métadonnées peuvent faire référence à «x» et «y».
- En d'autres termes, les outils et les bibliothèques ignoreront les annotations non prises en charge
Exemple
Annotations numériques (fictives) comprises entre 3 et 10, considérées comme des caractères par ctype.
Annotated[int, ValueRange(3, 10), ctype("char")]
Impressions
- ʻAnnotated` est difficile à écrire. Je voulais écrire plus grossièrement en tuple ...
- Vous pouvez obtenir le contenu de l'annotation même au moment de l'exécution (
get_type_hints ()
), donc il semble que les bibliothèques et les frameworks qui l'utilisent sortiront.
- J'espère que le code ne sera pas chaotique suite à un abus
- Bien que PEP-3107 (annotation de fonction) soit introduit, PEP-526 (Syntaxe pour les annotations de variables) N'est pas du tout mentionné. Un enfant pitoyable ...
- Bien sûr, vous pouvez annoter non seulement des fonctions mais également des variables.
- Sphinx doit également prendre en charge ...
- Je pense que je peux annoter les explications des arguments et des variables, mais je ne pense pas que ce soit populaire parce que c'est difficile à écrire.
- J'ai fait un problème. Je suis sûr que je le ferai demain ...
def hello(name: Annotated[str, Description("Nom")],
message: Annotated[str, Description("Format de message")],
language: Annotated[str, Description("Langue")] = "ja"
) -> Annotated[None, Description("Aucun")]:
...