2. Généralités sur Python#

2.1. Quel est le role d’un langage ?#

D’un coté l’Homme utilise pour communiquer des langues (dites « naturelles ») qui permettent une très grande expressivité. Le registre de ces langues est vaste : on peut exprimer, avec des nuances fines, des lois, des récits, de la poésie, etc. Ces langues permettent aussi de décrire de façon relativement concise des procédures complexes, par exemple une méthode pour déterminer les nombres premiers inférieurs à 100. De telles procédures ou méthodes sont appelées algorithmes. Si les langues naturelles permettent de décrire des algorithmes de façon concise, elles ont en revanche l’inconvénient d’être ambigues : un même texte peut être compris de différentes manières.

De l’autre, les circuits électroniques des ordinateurs sont pilotés par des programmes écrits à un niveau extrêmement élémentaire (on parle de « langages machine »). Ces langages ne présentent aucune ambiguité, ils décrivent les opérations élémentaires qui peuvent être réalisé par un processeur. Leur très grande proximité avec les détails techniques des processeurs rend fastidieuse la rédaction des programmes.

Les langages de programmation sont sensés faire l’interface entre ces deux mondes. Ils sont formels donc ne présentent aucune ambiguité, tout en restant à un niveau de compréhension assez proche de l’Homme. Il permettent donc de décrire des programmes de façon concise et compréhensible. Cette description est appelé « code source ».

2.2. Paradigme de programmation#

Il existe différents paradigmes de programmations, des « styles » qui correspondent à la manière dont est formulé un programme. Ces paradigmes peuvent être combinés au sein d’un même langage.

  • En programmation impérative, le code source décrit une série d’instructions qui seront exécutées les unes à la suite des autres et qui auront pour effet de modifier l’état de variables.

  • En programmation fonctionnelle, le code est décrit comme un ensemble de fonctions mathématiques. Le résultat d’un programme revient à calculer le résultat d’une fonction.

  • En programmation orientée objet, le code définit des structures appellés « objets ». Ces objets sont les briques de base qui interagissent les unes avec les autres.

Python est un language impératif qui intègre des concepts de programmation fonctionnelle et objet. Dans ce cours, nous aborderons peu la programmation fonctionnelle et objet. Nous découvrirons essentiellement la programmation impérative.

2.3. Se faire une image de la programmation impérative#

La programmation c’est comme de la cuisine. Une recette est une liste d’opérations qui va être réalisé par un cuisinier. Ce dernier va suivre, ligne après ligne, les étapes écrites dans la recette. Pendant sa réalisation, il pourra stocker le résultat d’étapes intermédiaires dans des récipients dont il réutilisera le contenu plus tard.

La programmation impérative fonctionne de manière assez similaire. La recette c’est le code source de notre programme. La liste de toutes les instructions que l’on souhaite réaliser. Le cuisinier c’est l’interpréteur. Un programme qui sera chargé de lire, une à une, les instructions de notre code source et qui les réalisera (en fait une demandera au processeur de les réaliser). Enfin, tout comme il existe des récipients pour notre cuisinier, l’interpréteur utilisera la mémoire de l’ordinateur pour stocker le résultat de calcul intermédiaire. Ce que l’on appel « récipient » on l’appelera bientot « variable »…

2.4. Que veut dire interpréter/compiler ?#

Les langages de programmation sont nombreux. Suivant celui qu’on utilise pour la rédaction du code source d’un programme, il existe en réalité deux manières différentes de transformer le code source (la recette) en code machine.

Le code source d’un programme peut être compilé, c’est à dire traduit intégralement dans le langage machine. Cette étape est réalisée par un compilateur. Le résultat est un programme directement exécutable. L’avantage de cette méthode est que des optimisations peuvent être réalisées lors de l’étape de compilation. L’inconvénient est que le code source doit être compilé pour chaque grande famille de machines (en fonction de leur architecture — Mac, PC, smartphone — mais aussi leur système d’exploitation — Windows, Linux, etc.).

../_images/compilation.jpg

Fig. 2.1 Shéma de la compilation.#

D’autres langages de programmation, comme Python, ne sont pas compilés mais interprétés. Dans ce cas, un programme existant sur la machine (un interpréteur) va réaliser l’opération de traduction des instructions à la volée. L’interpréteur va lire les instructions du code source ligne après ligne pour les convertir en code machine et les exécuter. Les langages interprétés donnent des applications qui sont souvent moins rapides que celles obtenues à partir de langages compilés mais ont l’avantage de ne pas devoir être compilées pour chaque architecture cible. Ceci permet aussi à ces applications d’être portable d’un système à un autre.

../_images/interpretation.jpg

Fig. 2.2 Shéma de l’interprétation.#

Pour reprendre notre analogie de la cuisine, il faut s’imaginer que d’un ordinateur à un autre, beaucoup de choses peuvent changer. C’est aussi le cas d’une cuisine à une autre. Lorsque l’on fait une recette, notre cuisinier réalise chaque étape en fonction des ustensiles dont il dispose, il s’adapte. C’est le rôle de l’interpréteur qui traduit chaque instruction de notre code source dans le langage machine qui correspond à la machine sur laquelle est exécuté le programme.

Python est un langage de programmation interprété. Voici un premier exemple de programme. Vous devriez, même sans connaitre Python, pouvoir comprendre ce qu’il fait.

age = int(input("Quel age avez-vous ?\n"))
if age >= 18:
    print("Vous pouvez voter.")
else:
    print("Vous ne pouvez pas voter.")

2.5. Versions de Python#

Digression nécessaire. Python est langage qui a été créé par Guido van Rossum en 1991. Depuis il n’a cessé d’évoluer. À l’heure où j’écris ce cours, la dernière version est la 3.11.1. Les évolutions entre les versions ne sont pas toutes de même nature. Certaines sont invisibles pour les utilisateurs, d’autres changent en profondeur le langage. En particulier, il existe des différences de fonctionnement notables entre les versions 2 et les versions 3 du langage.

Dans ce cours, nous utilisons les éléments de langage présent à partir de la version 3.7.