Python s’est depuis quelques temps imposé comme un des leaders sur le marché des langages de programmation pour la Data Science: simple à prendre en main pour des personnes avec un passé de statisticien, bien fourni en librairies, capable de tout, c’est un fidèle compagnon de route du Data Scientist.
Toutefois, on peut faire de la Data Science à un niveau assez important sans pour autant tout voir de ses particularités: combien de Data Scientists utilisent des décorateurs ? Python est-il multi-thread ou multi-core ?
Or l’autre jour, essayant de répondre à la question de pourquoi le code suivant affiche deux résultats différents,
Je suis tombé sur ça.
Typage dynamique vs typage statique
Python est un langage typé dynamiquement, c’est-à-dire qu’on peut changer le type d’une variable. A contrario, un langage typé statiquement force à définir le type des variables et à le conserver au cours de la vie de la variable.
Ça rend évidemment Python très facile à utiliser puisqu’on n’a pas besoin de préciser le type d’une variable à l’avance et on peut en changer facilement. Mais essayer de faire ça avec Java…
Cette facilité de Python peut également être source de confusion.
Si on ne sait pas précisément quel type de variable une fonction peut accepter alors on peut rencontrer des difficultés à lire le code d’un autre.
Mais une des features offertes par Python, nous permet de donner l’illusion d’un typage statique: les annotations.
Annotations
En Python, on peut utiliser les annotations pour ajouter des informations sur le code que l’on est en train d’écrire. Ainsi, je peux écrire:
On peut préciser la nature des arguments avec ces “:” et un string derrière mais aussi la nature de la sortie de la fonction. Ces annotations sont accessibles avec en utilisant:
ce qui renvoie:
Pour autant, je n’ai pas changé la structure interne de Python. Pire même, ça ne sert à rien.
et
fonctionnent très bien…
Alors que se passe-t-il? En dehors de l’aspect esthétique (somme toute relatif), est-ce totalement inutile?
Et bien oui et non…
Effectivement, ces annotations ne sont que des moyens d’obtenir des informations sur les différents arguments et sortie de votre fonction mais le gain en clarté est non négligeable dans l’utilisation de la fonction.
En effet lorsqu’on travaille à plusieurs ou plus simplement lorsque l’on partage du code, cela peut être très utile de pouvoir précisément identifier les arguments et sorties d’une fonction qu’on utilise.
MyPy
Mais on peut combiner ces annotations avec un autre outil: MyPy. C’est une librairie qui n’a pas vraiment compris comment fonctionne Python et pense que les annotations sont vraiment des déclarations de type.
Elle permet de vérifier si on fait les choses correctement… qu’on met bien les carré dans les carré, les ronds dans les ronds et les triangles dans les triangles.
Il faut donc voir les annotations comme une aide au développement et au partage de code et MyPy comme un guide pour développer proprement. Certes, ça ne change pas grand chose quand on code sur un notebook en important toutes ses fonctions de sklearn ou pandas. Certes, un vrai typage statique permettrait d’accélérer le fonctionnement de Python (puisque celui-ci n’aurait plus besoin d’inférer le type des variables) mais ça peut aider à se retrouver et à débugger un trop plein de lignes de code.
Et même si je sais que les annotations c’est comme les bonnes résolutions, on se dit qu’on va les utiliser et deux fonctions plus tard, c’est oublié, je voulais au moins vous parler de ma découverte.
Cet article vous a plu ? N’hésitez pas à vous abonner à notre newsletter pour recevoir des astuces data que vous ne trouverez nulle part ailleurs !