Introduction au language Python#
Qu'est-ce que Python ?#
- Multi-usage (WEB, application graphique, script, serveur etc)
- Programmation Orientée Objet (POO)
- Tout est objet
- Interprété
- Centré sur la lecture et la productivité
- Syntaxe du code simple
- Grosse communauté
- De nombreux packages disponibles sur internet sur PyPi.org
Exemple d'un code qui déclare une variable et compare si sa valeur est supérieur à 5 afin d'afficher un message :
1 2 3 4 5 6 7 8 |
|
Versions#
- Python 2
- Sortie en 2000
- Il a été très utilisé, notamment sur les tutoriels sur internet et quelques projets qui tardent à se mettre à jour
- Une adoption massive (QGIS 2)
- Dernière version le 1 janvier 2020
- Python 3
- Sortie en 2008, mais il s'agit d'une adoption très lente, tellement Python 2 a été massivement adopté.
- Dernière version 3.13.X du 7 octobre 2024
- 1 version majeure par an, en octobre
- QGIS 3 requiert :
- Python 3.5 minimum for QGIS 3.4
- Python 3.6 minimum for QGIS 3.18
- Python 3.7 minimum for QGIS 3.20
- Python 3.9 minimum for QGIS 3.40
- Version de Python souvent supérieure à la version minimum, sauf sur MacOS… 😑
- Python release cycle
Rappel de base sur Python#
- Un mémo Python plus important sur W3Schools
- Un cours Python sur OpenClassRooms
La console#
Pour la suite de la formation, nous allons utiliser la console Python de QGIS.
Dans le menu Extensions ➡ Console Python.
Tip
Souvent, avec Windows, il y a un conflit avec un raccourci clavier pour taper le caractère {
ou }
dans la console.
Ces caractères sont utilisés en Python. Il est donc conseillé de supprimer ce raccourci clavier. Il s'agit du "zoom + secondaire" dans QGIS → menu Préférences ➡ Raccourcis clavier.
Les types de données#
Une variable peut contenir un entier, un booléen (True
ou False
), chaîne de caractères, nombre décimal, un
objet...
Il y a un faible typage des variables, c'est-à-dire qu'une variable peut changer de type au cours de l'exécution
du programme.
1 2 |
|
Nous allons par la suite utiliser type(variable
pour vérifier le type de la variable.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
Les structures de données#
Il existe quatre types de structure de données :
-
les variables simples (ci-dessus)
-
les listes (modifiables)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
# Créer une liste vide nombres = [] type(nombres) <class 'list'> # Créer une liste avec des éléments à l'intérieur mois = ['janvier', 'février', 'mars'] # Ajouter un élément mois.append('avril') # Ajouter une autre liste mois.extend(['mai', 'juin']) # Nombre de mois len(mois) # On peut accéder à un élément avec un "index" à l'aide de [] mois[2] # Attention à l'index maximum mois[12] Traceback (most recent call last): File "/usr/lib/python3.7/code.py", line 90, in runcode exec(code, self.locals) File "<input>", line 1, in <module> IndexError: tuple index out of range
-
les tuples (non modifiables)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
- les dictionnaires
Attention, les dictionnaires ne sont pas ordonnés, de façon native, même depuis Python 3.9. Si vraiment, il y a besoin, il existe une classe OrderedDict, mais ce n'est pas une structure de données native dans Python. C'est un objet qu'il faut importer.
1 2 3 4 5 6 |
|
Les commentaires#
Pour commenter le code dans un script, pas dans la console :
1 2 3 |
|
Arithmétique#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Concaténer des chaînes et des variables#
Concaténer, c'est assembler des chaînes de caractères dans une seule et même sortie. On peut concaténer des variables entre elles ou du texte.
Il existe plein de manières de faire, mais certaines sont plus pratiques que d'autres
1 2 3 4 5 6 7 |
|
À l'ancienne avec %
1 2 3 4 |
|
Nouveau avec {}
et format
1 2 3 4 5 |
|
Encore plus moderne avec fstring
1 2 3 4 |
|
Opérateurs logiques#
1 2 3 4 5 6 7 8 9 10 |
|
Condition#
Important, Python oblige l'indentation sinon il y a une erreur. Par convention, il s'agit de 4 espaces.
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Boucle for#
Utile lors que l'on connait le nombre de répétitions avant l'exécution de la boucle.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
|
Recherche d'un élément#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
Boucle while#
1 2 3 4 |
|
- En Python, il n'y a pas de boucle
do ... while
, à la place, on peut faire ainsi :
1 2 3 |
|
Switch#
Python 3.10 minimum
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
List Comprehensions#
C'est une façon très pythonique et très utilisée de créer des listes. Par exemple, créer une liste des nombres impairs entre 1 et 9 :
1 2 3 4 5 6 7 8 |
|
Autre exemple en transformant une liste :
1 2 |
|
- Il existe aussi les Dict Comprehensions (moins utilisé)
Manipulation sur les chaînes de caractères#
- Pour information, les chaînes de caractères sont des listes et on peut faire du slicing sur des listes :
1 2 3 4 5 6 7 8 9 10 |
|
Slicing sur les mois de l'année :
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Fonctions#
Une fonction permet de factoriser son code. Elle peut :
- ne pas prendre de paramètre en entrée
- prendre un ou plusieurs paramètres en entrée
- ces entrées peuvent avoir des valeurs par défaut, on n'est donc pas obligé de les fournir de lors l'appel de la fonction
- une fonction peut ne rien retourner, (pas d'instructions
return
ou alorsreturn None
) -
ou alors retourner une ou plusieurs valeurs (cela sera implicitement une liste)
-
Voici des exemples de fonction Python. Encore une fois, attention à l'indentation !
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
- Une fonction peut retourner plusieurs valeurs :
1 2 3 4 5 |
|
- Il se peut que l'on ne connaisse pas à l'avance le nombre précis d'arguments dans une fonction.
args
est utilisé pour passer un nombre indéterminé d'argument à la fonctionkwargs
est utilisé pour un nombre indéterminé d'arguments nommés
1 2 3 4 5 6 7 8 9 |
|
POO : Programmation Orientée Objet#
Pour l'explication théorique, lire l'introduction dans le chapitre de la console.
On peut introduire l'utilisation de la POO à l'aide de l'objet Path
. La documentation de cette classe se trouve
en ligne.
La librairie Path
est installé de base avec Python.
La programmation orientée objet permet de créer un objet (on parle plus précisément d'instancier) puis on peut appeler des méthodes sur cet objet.
Imaginons que l'on crée un objet voiture
Dans une console QGIS :
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Tip
Quand l'instruction se termine par des ()
, on dit que c'est une méthode de cet objet. Il s'agit d'une fonction,
qui peut prendre ou non des paramètres et qui peut renvoyer ou non des résultats en sortie.
Quand l'instruction ne se termine pas par ()
, on accède à une propriété de l'objet.
Pour une application avec des objets QGIS, il faut lire le chapitre suivant sur la console ou encore la partie sur l'écriture d'un script Processing.
Exceptions#
Lire le chapitre sur le parcours des entités.
Truc et astuces#
Passage par référence#
Warning
Attention au passage par référence :
1 2 3 4 5 |
|
Enumerate#
Avoir un compteur lors de l'itération d'une liste :
1 2 3 |
|
Annotations#
Dans la suite de la formation, il est possible de voir des annotations Python. Cela permet de spécifier le type des variables dans les paramètres des fonctions et/ou de définir le type de retour.
1 2 3 4 5 6 |
|
Il faut lire la documentation des annotations pour voir les différentes possibilités.
Terminologie#
- Package
- Module
- Classe
- Instance / Objet
- Variable