Que se cache-t-il derrière Python ?

11 Avril 2019
python
Python, créée en 1991, est désormais le principal langage de programmation dans les domaines du Machine Learning, du Big Data et de la Data Science. En effet, il permet d’automatiser certaines parties pauvres en valeur ajoutée humaine et réalise des prototypes d’applications de façon rapide. Mais quelles curiosités peut-on trouver derrière ce langage répandu ?

Une origine digne d’Hollywood …

Le créateur du langage Python, un néerlandais nommé Guido van Rossum, a d’abord travaillé sur un langage nommé ABC. Cet ancêtre de Python fut développé pour un projet de système d’exploitation distribué AMOEBA. Cependant, l’absence d’internet a détruit ce langage qui n’a pas pu bénéficier des améliorations possibles grâce aux partages et retours d’expériences de la part des utilisateurs. Est alors créé Python !

Python fait partie des « Trois P », trois langages de script ayant vu le jour dans une même période :

  • Perl : Langage très puissant pour manipuler les expressions régulières mais souffrant d’une lisibilité douteuse, Perl a été conçu pour augmenter les possibilités du shell unix à l’origine « Practical Extraction and Reporting Language ».
  • PhP : Langage originellement très simple, mais qui a beaucoup évolué depuis, il est très permissif sur les approximations de codage. Il a été conçu pour les pages web à l’origine « Personal Home Page » puis « PHP : Hypertext Preprocessor ».

Fun Fact, le nom du langage qui nous intéresse ici vient de l’affection de Guido pour le « Monty Python Flying Circus », une comédie surréaliste créée par un groupe comique anglais « Monty Python ». Dans un de leurs célèbres sketchs, ce groupe a, en quelques sortes, inventé le mot « spam » pour désigner une marchandise non désirée mais imposée de force. C’est pourquoi l’usage veut que les exemples de petits programmes Python utilisent le « spam », le jambon, les œufs...

Autre détail amusant, jusqu’en 2018, le créateur du langage Python possédait au sein de la communauté Python le titre de « BDFL » c’est-à-dire de « Dictateur Bienveillant à Vie ». Cela signifie qu’il tranchait en dernier ressort pour les décisions concernant l’évolution du langage.

 

… Pour un langage plein de simplicité

Le premier, principal et fondamental objectif de Python est la lisibilité permise par la simplicité. Certains prétendent même que lire du code Python équivaut à lire de l’anglais.

Le site « Rosetta Code » permet de comparer des programmes réalisant le même travail dans plusieurs centaines de langages informatique différents. Notre choix pour illustrer la simplicité de Python s’est porté sur un cas assez court : la résolution de la fonction d’Euclide, qui détermine le plus grand commun diviseur de deux nombres.

 

Python :

def gcd(u, v):

 return gcd(v, u % v) if v else abs(u)

 

Perl :

sub gcd (Int $a is copy, Int $b is copy) {

 $a & $b == 0 and fail;

 ($a, $b) = ($b, $a % $b) while $b;

 return abs $a;

}

 

Langage C :

int gcd(int u, int v) {

 return (v != 0)?gcd(v, u%v):u;

}

 

Langage C++ :

#include <boost/math/common_factor.hpp>

int gcd(n, n)

{

 return boost::math::lcm(n, m);

}

 

A la lecture de ces lignes de code, on comprend qu’il faut significativement moins de temps pour réaliser un projet en Python qu’en C++, et que la taille du code est également considérablement réduite. La raison pour laquelle Python n’est pas systématiquement choisi pour les projets informatiques est principalement mais pas seulement le temps d’exécution.

Python est également connu pour sa courbe d’apprentissage très avantageuse. Cela signifie que le rapport [niveau de compétence obtenu] sur [temps passé à apprendre] est plus élevé que dans la plupart autres langages. Ce n’est pas un hasard si ce langage s’impose progressivement pour l’enseignement de l’informatique après BASIC, PASCAL et JAVA.

De plus, le langage Python est très expressif. Cette caractéristique n’est qu’accentuée par l’existence de bibliothèques dont notamment « itertools » et « collections ».

Exemple simple tentant d’illustrer la simplicité « pythonnienne » :

 

# pioche dans les deux séquences

list(zip([1, 2, 3], ['a', 'b', 'c']))

résultat : [(1, 'a'), (2, 'b'), (3, 'c')]

Exemple d’utilisation d’itertools, module qui implémente des itérateurs inspirés par d’autres langages informatiques pour des itérations « efficaces » :

 

# Ce programme trouve tous les sous-ensembles d’un ensemble « powerset »)

import itertools

def powerset(iterable):

    xs = list(iterable)

    return list(itertools.chain.from_iterable(itertools.combinations(xs,n) for n in range(len(xs)+1)))

Exemple collections, module qui implémente des types de données « plus sophistiqués » que les standards :

 

# Ce programme trouve les 10 mots les plus fréquents dans la pièce Hamlet (on suppose qu’elle a été téléchargée dans le fichier Hamlet.txt)

import re

import collections

words = re.findall(r'\w+', open('hamlet.txt').read().lower())

collections.Counter(words).most_common(10)

 

Python, simple jusque dans son accès

Le langage MATLAB est payant, il faut une licence. Le langage JAVA est gratuit mais IBM paie Oracle pour associer Java à ses produits. Le langage Objective C sert les desseins de la société Apple, le langage C# (prononcé « C-Sharp ») ceux de la société Microsoft. Il existe un équivalent gratuit de C# : Mono.

Note : le compilateur de référence pour C/C++ gcc/g++ est gratuit et très performant.

En opposition à tous ces langages, la licence Python appartient depuis 2001 à la Python Software Foundation, organisation sans but lucratif. La licence est donc FLOSS "Free/Libre and Open Source Software", à l’instar de Linux, Ubuntu, LibreOffice, Mozilla Firefox, Mono (clone de la plateforme .NET de Microsoft), Apache Web Server et le VLC player.

 

Mais qui reste « de haut niveau »

On appelle « haut niveau » les langages de forte abstraction, qui s’éloignent de l’électronique de l’appareil opérant le programme. Un langage orienté autour du problème à résoudre sans s’occuper des caractéristiques techniques du matériel utilisé. Certains reprochent à ces langages de perdre le contrôle sur ce qu’exécute le programme.

L’exemple type de langage de très haut niveau (déclaratif) est le Prolog avec cet exemple approximatif :

pere(Louis10,Philippe4)

pere(Jean1,Louis10)

grandpere(x,z) si pere(x,y) et pere(y,z)

 

L’interpréteur sera en mesure d’établir que le grand-père de Jean est Philippe et de parcourir facilement avec quelques commandes et quelques données supplémentaires l’arbre généalogique des rois de France.

Dans le cas contraire, l’exemple type de langage de très bas niveau est l’Assembleur. L’aridité de ce langage contraint le programmeur à commenter, c’est-à-dire expliquer, chaque ligne de source incompréhensible sinon.

Le langage Python est un langage « de haut niveau ». Il s’apparente donc bien plus au premier exemple.

Un marqueur connu sur les différents langages de haut niveau est la présence ou non de « ramasse miette ».

Une manière originale d’expliquer le ramasse miette est d’imaginer utiliser deux lave-vaisselle, un avec un post-it « Propre » et un autre avec un post-it « Sale ». Au début de la mise en route de votre cuisine, toute la vaisselle (propre) est dans le premier et le deuxième est vide. Quand vous avez besoin d’un couvert, vous le prenez dans le « Propre » et le mettez, une fois utilisé, dans le « Sale ». Quand le « Propre » est vide, vous mettez le « Sale » en route (pour un lavage immédiat) et… vous échangez les post-its !

L’avantage du ramasse miette est l’absence de fuite mémoire pour cause d’oubli de libération, mais l’inconvénient est qu’il peut être invoqué à un moment inattendu et retarder de manière impromptue le déroulement du programme. C’est pourquoi les systèmes à fortes contraintes temps réel ne peuvent en bénéficier.

Python, comme Java, intègre un ramasse miette, donc le programmeur n’a pas à se soucier de ce problème. Un langage comme C++ n’intègre pas de ramasse miette. Le programmeur qui alloue de la mémoire doit faire en sorte de la libérer explicitement lorsqu’il n’en a plus besoin. Le langage Go de Google propose un mode avec (en standard) et sans (en option).

Ces quelques curiosités ne sont qu’un prélude à une connaissance exhaustive du langage Python. Les maîtriser permettront de choisir le langage adapté aux spécifications de votre projet et en amoindrir les coûts monétaires, humains et technologiques. Nos experts se tiennent à votre disposition pour vous aiguiller plus en profondeur dans les méandres de ce beau langage et vous aider à choisir celui qui répondra au mieux à vos attentes !

 

j.lefrancois

Jérémie Lefrançois, consultant AUSY depuis 2004, a écrit ses premiers programmes en Basic sur ZX Spectrum en 1982. Diplômé d'un DESS en Informatique en 1989, il a touché à de nombreux langages informatiques à titre personnel ou professionnel. Il aime effectivement explorer et comparer les possibilités des différents langages et plus spécifiquement approfondir Python qui a sa prédilection depuis 2014. C'est donc avec un grand intérêt qu'il surveille les évolutions de ce langage dynamique dont il apprécie la facilité de mise en œuvre.

 

Aussi n’hésitez pas à visiter notre offre Big Data.

Parlons ensemble de vos projets. 

bouton contact