Blog ENI : Toute la veille numérique !
En raison d'une opération de maintenance, le site Editions ENI sera inaccessible le mardi 10 décembre, en début de journée. Nous vous invitons à anticiper vos achats. Nous nous excusons pour la gêne occasionnée
En raison d'une opération de maintenance, le site Editions ENI sera inaccessible le mardi 10 décembre, en début de journée. Nous vous invitons à anticiper vos achats. Nous nous excusons pour la gêne occasionnée

Le langage Python : adoptez un serpent !

Introduction

Python est un langage de programmation polyvalent et facile à apprendre. Il existe depuis près de 30 ans, et est resté pendant des années peu répandu avant de connaître actuellement un grand succès - au point d’être l’un des langages de programmation les plus enseignés aujourd’hui. Son avantage principal est sa simplicité et le gain de temps pour l’utilisateur : je programme en un seul jour ce que je mettrai trois jours à faire en Java et une semaine en C. Python permet donc un gain de productivité important.

Python est un logiciel libre disponible gratuitement et tourne sur pratiquement tous les systèmes d’opération existants (PC Linux, PC Windows, Mac, Android...). Il en existe actuellement deux versions : la version 2.x et la version 3.x. Owlready nécessite la version 3.x, nous utiliserons donc celle-ci dans ce livre (cependant, les différences entre les deux versions sont minimes).

Dans ce chapitre, nous présenterons rapidement les bases du langage Python et de sa syntaxe. Cependant, si vous n’avez encore jamais programmé, nous vous conseillons de consulter tout d’abord un ouvrage entièrement consacré à l’apprentissage de ce langage. Au contraire, si vous connaissez déjà bien le langage Python, vous pouvez vous rendre directement à la section...

Installer Python

Sous Linux, la quasi-totalité des distributions propose des paquets pour Python (bien souvent, ces paquets seront même installés d’office). Vous pouvez vérifier qu’ils sont présents dans le gestionnaire de paquet de votre distribution, et installer le paquet python3 si nécessaire. Installez également les paquets python3-pip et python3-idle si votre distribution les distingue du paquet python3 principal.

Sous Windows et Mac OS, il est nécessaire d’installer Python. Vous pouvez le télécharger à partir de l’adresse suivante : http://python.org/download/

Démarrer Python

Pour programmer en Python, vous pouvez soit utiliser un environnement de développement intégré (Integrated Development Environment, IDE), soit utiliser un éditeur de texte et un terminal. Si vous débutez avec Python, la première option est sans doute la plus simple ; nous vous suggérons l’environnement IDLE qui est généralement installé avec Python 3.

Python est un langage interprété, il peut donc être utilisé dans deux modes différents :

  • Le mode « console », dans lequel l’ordinateur interprète une par une les lignes de code tapées par le programmeur, au fur et à mesure de leur saisie. Ce mode est pratique pour effectuer des tests rapides. La fenêtre Shell ouverte par défaut par IDLE correspond à ce mode (voir exemple ci-dessous). Le signe « >>> » en début de ligne est « l’invite de commandes » de Python : l’interpréteur vous demande d’entrer une ligne de code.

Attention, en mode « console », les lignes de code saisies ne sont pas enregistrées et seront donc perdues lors de la fermeture d’IDLE !

images/p12_bonjour1.png
  • Le mode « programme », dans lequel l’utilisateur écrit un programme sur plusieurs lignes, puis l’ordinateur exécute...

Syntaxe

1. Commentaires

Dans Python, tout ce qui suit le caractère « # » (dièse) est un commentaire et n’est pas pris en compte par l’interpréteur. Les commentaires sont utilisés pour donner des indications aux programmeurs qui liront le programme. Voici un exemple :

>>> # Ceci est du texte qui n'est pas pris en compte par Python ! 

2. Écrire à l’écran

La fonction print() permet d’écrire à l’écran (dans la console, ou sur la sortie standard en mode « programme ») ; nous l’avons déjà rencontrée précédemment. Il est possible d’afficher plusieurs valeurs en les séparant par des virgules :

>>> print("Quoi de", 9)  
Quoi de 9 

La fonction print() peut être omise lorsque l’on est en mode « console », en revanche elle est obligatoire en mode « programme ».

>>> print(2 + 2)  
4  
>>> 2 + 2  
4 

3. Aide

Python définit un grand nombre de fonctions. En mode console, la fonction help() permet d’obtenir de l’aide sur une fonction, par exemple pour la fonction print() :

>>> help(print) 

4. Variables

Une variable est un nom auquel une valeur est associée. Souvent, la valeur ne sera connue qu’à l’exécution du programme (par exemple...

Principaux types de données

Python peut manipuler différents types de données : des nombres entiers (integer en anglais, abrégé en int), des nombres à virgule (souvent appelés flottants ou float en anglais), des chaînes de caractères (string en anglais, abrégé en str) et des booléens (valeur vraie ou fausse, bool) :

>>> age = 31 # Entier  
>>> poids = 64.5 # Flottant  
>>> nom = "Jean-Baptiste Lamy" # Chaîne de caractères  
>>> enseignant = True # Booléen  
>>> etudiant = False # Booléen 

1. Les nombres entiers (int) et réels (flottant, float)

Les nombres entiers sont les nombres sans virgule. Il n’y a pas de limites à leurs valeurs en Python.

Les nombres réels (ou nombres « avec virgule » en langage courant) sont appelés nombres à virgule flottante en informatique (car la position de la virgule est dite « flottante » : il peut y avoir beaucoup de chiffres avant la virgule et peu après, ou l’inverse). Un point est utilisé pour indiquer la virgule, comme dans l’exemple suivant :

>>> poids = 64.4 

En Python, les flottants ont en fait une précision équivalente aux « doubles » que l’on trouve dans la plupart des autres langages (tels que C, C++ et Java).

Attention, 10.0 est un flottant alors que 10 est un entier.

Le tableau suivant résume les principales opérations sur les nombres :

Opérations algébriques

Exemples

Addition

>>> 2+2

Soustraction

>>> 4-2

Multiplication

>>> 3*4

Division

>>> 10 / 3

3.3333333333333

Division entière

>>> 10 // 3 3

Puissance

>>> 3** 2 9

2. Les booléens (bool)

Les booléens peuvent prendre deux valeurs, qui sont notées True (vrai, valeur entière 1) et False (faux, valeur entière 0) en Python.

3. Les chaînes de caractères (str)

Les chaînes de caractères correspondent à du texte ou des portions de texte. Il n’y a pas de limite sur le nombre de caractères (zéro, un ou plusieurs). Les chaînes de caractères sont toujours placées entre guillemets (simple ou double ; il est préférable d’utiliser...

Conditions (if)

Les conditions permettent d’exécuter des commandes seulement dans certaines situations, qui seront déterminées à l’exécution du programme. La syntaxe générale des conditions en Python est la suivante :

if condition1 :  
   instruction exécutée si la condition1 est vraie  
   instruction exécutée si la condition1 est vraie...elif condition2 :  
   instruction exécutée si la condition1 est fausse  
   et la condition2 est vraie...  
else:  
   instruction exécutée si la condition1 
   et la condition2 sont fausses...  
suite du programme (exécutée que les conditions soient vraies ou 
fausses) 

elif est la contraction de else et de if (« sinon, si » en français). Les parties « elif » et « else » sont optionnelles, et plusieurs parties elif peuvent être présentes. L’indentation (c’est-à-dire les espaces blancs en début de ligne) est importante, car c’est elle qui indique à quel endroit la condition se termine. Le nombre d’espaces est au choix du programmeur, mais doit rester constant.

La partie condition peut utiliser les opérateurs de comparaison habituels :

  • < (inférieur à)...

Boucles (for)

Une boucle permet d’exécuter plusieurs fois les mêmes commandes. En Python, les boucles parcourent une liste, et exécutent une série d’instructions pour chaque élément de la liste (il s’agit d’un type de boucle souvent appelé « for each » dans d’autres langages de programmation). L’élément en cours est placé dans une variable de votre choix. La syntaxe générale de la boucle for est la suivante :

for variable in liste :  
   if conditions 1: continue # Passe à l'élément suivant dans la liste 
   if conditions 2: break # Interrompt la boucle  
   commande répétée plusieurs fois 
else: 
   commande exécutée si la boucle est allée jusqu'au bout  
   (pas de break rencontré)  
suite du programme (exécutée une seule fois) 

L’instruction continue permet d’interrompre l’itération en cours et de passer aussitôt à l’élément suivant. L’instruction break permet d’interrompre immédiatement la boucle. Enfin, la partie else est exécutée uniquement si la boucle est allée jusqu’au bout (c’est-à-dire qu’elle n’a pas été...

Les générateurs

Un générateur permet de parcourir une série d’éléments (à la manière d’une liste), cependant, il ne les stocke pas tous en mémoire comme une liste. En effet, le générateur produit les éléments un par un et ceux-ci doivent être immédiatement traités (par exemple dans une boucle). Il permet donc un gain de performance, notamment lorsque l’on travaille sur de gros volumes de données. C’est pour cela qu’un certain nombre de méthodes d’Owlready retournent des générateurs et non des listes.

Les générateurs peuvent aussi être convertis en listes avec la fonction list(), par exemple pour l’affichage, comme ci-dessous :

>>> print(list(mon_générateur)) 

En revanche, pour effectuer une boucle sur un générateur, il est préférable de ne pas utiliser list() pour améliorer les performances, comme suit :

>>> for x in mon_générateur: print(x) 

Fonctions (def)

Les fonctions permettent de définir un groupe d’instructions (ou « sous-programme »), en vue de l’exécuter à plusieurs reprises à des moments différents. Ce groupe d’instructions peut recevoir des paramètres qui seront passés à l’appel de la fonction et disponibles dans celle-ci sous forme de variables locales. Les fonctions sont créées avec l’instruction def dont voici la syntaxe générale :

def nom_fonction (paramètre1, paramètre2 = valeur_par_défaut,...):  
  corps de la fonction  
  return valeur de retour 

Les fonctions peuvent recevoir plusieurs paramètres, et chacun d’eux peut posséder une valeur par défaut.

L’instruction return indique la valeur de retour de la fonction, et interrompt celle-ci.

Les fonctions sont ensuite appelées avec des parenthèses (les parenthèses sont obligatoires, même s’il n’y a aucun paramètre) :

résultat = nom_fonction(valeur_paramètre1, valeur_paramètre2)  
résultat = fonction_sans_paramètre() 

Voici un exemple de fonction très simple :

>>> def doubler(x):  
...            return x * 2  
>>> doubler(3)  
6  
>>> doubler("bla")  ...

Classes (class)

1. Classes et instances

Les classes constituent l’une des bases de la programmation orientée objet. Une classe représente une catégorie donnée d’objets, par exemple la classe des animaux ou des livres. Par convention, les noms de classes commencent toujours par une majuscule (« Livre » par exemple). La classe définit les propriétés disponibles pour chaque objet de cette classe (par exemple, pour la classe Livre : le titre, l’auteur et le prix) et les méthodes que l’on pourra appliquer sur chaque objet (par exemple, pour la classe Livre : formater une citation du livre).

La classe permettra ensuite de créer des objets appelés « instances » de la classe, par exemple « Le seigneur des anneaux » et « La magicienne oubliée » seront deux instances de la même classe Livre. La classe permet donc de « factoriser » la partie commune aux instances : les définitions de propriétés et les méthodes, tandis que les valeurs des propriétés seront spécifiques à chaque instance.

En Python, les classes sont créées avec l’instruction class. Les méthodes sont créées à l’intérieur des classes avec def (comme pour les fonctions), le premier paramètre représente l’objet sur lequel la méthode est appliquée (celui-ci est appelé self par convention ; il est équivalent au mot-clef this en Java, mais apparaît explicitement dans les paramètres des méthodes). Les attributs ne sont pas typés, tout comme les variables. Ils sont définis en leur donnant une valeur, avec la syntaxe « self.attribut = valeur ».

La syntaxe générale de l’instruction class est la suivante :

class ma_classe(classe_parente1, classe_parente2,...):  
     attribut_de_classe = valeur  
     def__init__(self, paramètres...): # constructeur  
        self.attribut_de_l'objet = valeur  
 
     def méthode...

Modules Python

Les modules Python définissent des fonctions et des classes additionnelles dans des domaines spécifiques (tels que les mathématiques, la bioinformatique, le graphisme 3D...). Owlready2 est un exemple de module Python. Les fonctions et classes contenues dans les modules ne sont pas disponibles par défaut, il est nécessaire d’importer les modules correspondants pour y avoir accès.

1. Importer un module

Il existe deux manières d’importer un module en Python :

  • L’importation du module avec son nom. Avec cette méthode, il est nécessaire de mentionner le nom du module suivi d’un « . » devant chacune des fonctions et des classes du module. Voici un exemple sur le module math :

>>> import math  
>>> math.cos(0.0)  
1.0 
  • Importation du contenu du module. Avec cette méthode, les fonctions et classes du module peuvent être utilisées directement, sans avoir à mentionner le nom du module à chaque appel. En revanche, si plusieurs modules définissent des fonctions ou classes ayant le même nom, cela pourra poser problème : dans ce cas, la dernière importation « écrasera » la précédente. Voici un exemple sur le module math :

>>> from math import *  
>>> cos(0.0)  
1.0 

Le langage Python inclut un grand nombre de modules...