Attacher des métadonnées aux arguments d’une fonction avec les annotations en Python

Vous avez écrit une fonction, mais vous aimeriez y attacher des informations supplémentaires pour que d’autres puissent en savoir plus sur la façon dont la fonction est censée être utilisée.

Les annotations d’argument de fonction peuvent être un moyen utile de donner aux programmeurs des conseils sur la façon dont une fonction est censée être utilisée. Par exemple, considérez la fonction annotée suivante:

def ajouter(x:int, y:int) -> int:
    return x + y

L’interpréteur Python n’attache aucune signification sémantique aux annotations jointes. Ce ne sont pas des contrôles de type, et ils ne font pas non plus que Python se comporte différemment de ce qu’il faisait auparavant.

Cependant, elles peuvent donner des indications utiles à d’autres personnes lisant le code source sur ce que vous aviez en tête. Des outils et des cadres de travail tiers pourraient également donner une signification sémantique aux annotations. Ils figurent également dans la documentation:

>>> help(ajouter)
Help on function add in module __main__:

ajouter(x: int, y: int) -> int
>>>

Bien que vous puissiez attacher n’importe quel type d’objet à une fonction sous forme d’annotation (par exemple, nombres, chaînes de caractères, instances, etc.), les classes ou chaînes de caractères semblent souvent avoir le plus de sens.

Les annotations de fonction sont simplement stockées dans l’attribut __annotations__ d’une fonction. Par exemple:

>>> ajouter.__annotations__
{'y': <class 'int'>, 'return': <class 'int'>, 'x': <class 'int'>}

Bien qu’il existe de nombreuses utilisations potentielles des annotations, leur utilité principale est probablement la documentation de votre code.

Parce que Python n’a pas de déclarations de type, il peut souvent être difficile de savoir ce que vous êtes censé passer en paramètre à une fonction si vous lisez simplement son code source de manière isolée. Une annotation donne plus d’indices à quelqu’un.

LAISSER UN COMMENTAIRE

Please enter your comment!
Please enter your name here