Introduction

Pourquoi apprendre Python ?

Une vidéo d’introduction…

Le langage

Python est un langage qui permet rapidement de produire du code efficace. Il possède une courbe d’apprentissage intéressante car on est rapidement opérationnel et l’acquisition de notions nouvelles se fait de façon assez fluide.

Python est un langage objet de haut niveau destiné à écrire rapidement des applications dans tous les domaines de l’ingénierie (web, calcul scientifique, cartographie, traitement de données, manipulations de fichiers, etc…).

Python est dans le top 3 des langages de programmation. Et si on fait abstraction de JavaScript cantonné aux seules technologies web, Python est le top langage de tous les classements.

../_images/01-IEEE2022.png

En mars 2022 :

Quelques caractéristiques de chacun des langages…

Python est un langage interprété haut niveau. Par comparaison avec C et Java, le temps de développement est réduit et le temps d’exécution plus important. Cependant ce dernier peut être drastiquement réduit en utilisant des bibliothèques spécifiques. Python produit du bytecode, un code intermédiaire entre les instructions machines et le code source. Ce bytecode est exécuté sur une machine virtuelle fournie par le langage, ce qui le rend portable vers plusieurs architectures. Le bytecode est produit et compilé en langage machine sur le disque pendant l’exécution . Python est typé dynamiquement ce qui introduit de la souplesse de programmation mais impose certaines vérifications pendant l’exécution au détriment de la vitesse d’exécution.

Java est un langage compilé haut niveau. Java produit également du bytecode. Le bytecode est produit avant l’exécution puis compilé en langage machine directement en mémoire pendant l’exécution. Java est typé statiquement ce qui accélère la vitesse d’exécution au détriment de la souplesse de programmation.

C est un langage compilé bas niveau. Le compilateur transforme les instructions en un code machine propre à l’environnement. Le code source n’est pas portable et doit être recompilé pour différents environnements d’exécution. Il est adapté à des contextes où le temps d’exécution est important et/ou la taille mémoire est critique. Sa programmation est plus complexe puisqu’elle donne accès directement à la mémoire. C’est aussi le langage le plus économe en énergie.

Les performances

La simplicité de programmation de Python :

  • est obtenue en échange d’un temps d’exécution généralement plus long ;

  • mais offre un gain significatif pour le temps de développement du programme.

Le temps d’exécution

Il est complexe de quantifier universellement la vitesse d’exécution des langages, qui dépend grandement du problème à traiter.

Pour un problème de comptage de mots les performances suivantes ont été relevées.

Language

Solution naïve

Solution optimisée

C

0.96

0.23

Java

1.40

1.34

Python

2.21

1.33

Pour un problème combinatoire, la version standard de Python est nettement plus lente. Par contre l’utilisation du module spécialisé itertools apporte un gain significatif.

Language

Temps de calcul

C++ naïf

2.42

Python (standard)

61.2

Python (optimisé)

0.09

Quelques stratégies pour accélérer le langage Python:

  • l’utilisation de modules spécialisés de la bibliothèque standard ;

  • le recours à des packages externes. Par exemple Numpy, « a Python library that provides a multidimensional array object […] and an assortment of routines for fast operations on arrays » ;

  • le recours à des accélateurs. Par exemple Numba « which translates Python functions to optimized machine code at runtime » ;

  • l’utilisation d’implémentations de Python alternatives à CPython, qui est l’implémentation par défaut. Par exemple Pypy « a fast, compliant alternative implementation of Python ».

Le lecteur intéressé par l’optimisation des performances pourra se pencher sur l’ouvrage de Micha Gorelick & Ian Ozsvald : High Performance Python.

Le temps de développement

Comparé à C et Java, le temps de développement d’un programme Python est significativement réduit comme le montre l’article An empirical comparison of C, C++, Java, Perl, Python, Rexx, and Tcl for a search/string-processing program. L’une des principales conclusions montre que le temps de développement est réduit d’un facteur proche de 3 par rapport à Java ou C.

../_images/01-medians-hours.png

D’autres métriques extraites du même article sont disponibles ici.

Conclusion

Il n’existe pas un langage universel qui serait inconditionnellement meilleur que les autres. Un langage informatique est un outil plus ou moins adapté à la problématique que l’on souhaite aborder.

Python est un langage de complexité d’apprentissage réduite dont le compromis entre la rapidité de développement et les performances en font un outil parfaitement adapté au monde de l’ingénierie.

Ce qu’il faut retenir

  • Python est un langage haut niveau

  • Python produit du bytecode

  • Python est un langage compilé

  • Python est typé statiquement

  • Le code Python est plus compact que le code Java

  • Python (standard) est plus rapide que Java ou C

  • L’utilisation de modules spécialisés accélère Python

  • Python optimisé peut être aussi rapide que Java et C

  • Python permet un gain de temps significatif pour la conception des programmes