Types de variables en Python : si on clarifiait la dynamique ?

Temps de lecture : 4 minutes
Share on facebook
Share on twitter
Share on linkedin
Share on email

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,

java

Je suis tombé sur ça.

java
Pour ceux qui, comme moi, ont déjà fait du Java, ça peut évoquer des souvenirs (voir des blessures) mais pour un utilisateur peu aguerri de Python, ça peut surprendre

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.

java

Ç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…

volcan explosion
Moi codant en Java - Allégorie

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:

java

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:

java

ce qui renvoie:

java

Pour autant, je n’ai pas changé la structure interne de Python. Pire même, ça ne sert à rien.

java

et

java

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.

 

java
Static typing, circa 2 ans et demi, colorized

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 ! 

S’abonner
Notifier de
guest
0 Commentaires
Inline Feedbacks
View all comments
Fermer le menu
0
Would love your thoughts, please comment.x
()
x