Généralités

Contenu sous licence CC BY-SA 4.0

Programme du cours

Généralités

  • Prise en main des notebooks
  • Généralités sur le langage Python

Variables et types de données

  • Qu'est-ce qu'une variable en python ?
  • Revue des types de données

Opérations, contrôle, fonctions et modules

  • Opérateurs
  • Structures de contrôle
  • Fonctions
  • Exceptions et gestionnaires de contexte
  • Compréhensions de listes & expressions génératrices
  • Modules
  • Bonnes pratiques
  • Python 3.x vs 2.x
  • Le Zen de Python

Numpy

Microprojet

Introduction à Pandas

Prise en main des notebooks

Le document que vous lisez est un notebook Jupyter. Il est constitué de cellules comportant :

  • soit du texte en Markdown comme ici.
  • soit du code Python, comme dans la cellule suivante:
In [1]:
print('Hello world!')
Hello world!

Note :

  • print() est une fonction fournie par python pour afficher du texte à destination de l'utilisateur.
  • In [ ]: indique le nombre d'exécutions du noyau.

Les deux modes du notebook :

  • Commande : permet de se déplacer d'une cellule à l'autre et d'exécuter les cellules
  • Edition : permet de modifier le contenu d'une cellule.

Changement de mode

  • Commande -> Edition : touche ↵ ou double-clic dans la cellule.
  • Edition -> Commande : pour basculer sans exécuter
    • Touche Esc
    • Touches ⇧ + ↵ pour exécuter la cellule et passer à la suivante. Exécuter une cellule en Markdown provoque le rendu visuel de celle-ci.

Exercice : Revenez en arrière, sélectionnez et exécutez (⇧ + ↵) la cellule de code qui contient

print('Hello world!')

Mode Commande

  • On se déplace à l'aide des flèches $\uparrow \downarrow$ ou en cliquant avec la souris.
  • On peut ajouter, effacer, déplacer, créer ou modifier le contenu des cellules à l'aide des menus déroulants en haut de la page

Mode Edition

  • on entre dans le mode édition avec la touche ↵ ou par un double-clic
  • signalement par la petite icône "crayon" en haut à droite, dans la barre de menu
  • on en sort avec Ctrl + ↵ (ou ⇧ + ↵ pour passer à la cellule suivante)

Note :

La plupart des actions à la souris peuvent se faire à l'aide des raccourcis du menu Help > Keyboard Shortcuts (touche H)

Exercice : Revenez en arrière, sélectionnez la cellule print('Hello world!'). Modifiez son contenu, par exemple en traduisant le message en français. Réexécutez-la et observez le nouveau résultat. Remarquez que le nombre d'exécutions augmente.

Autres commandes utiles

  • Redémarrer le kernel Python : Bouton correspondant ou touche 0,0 en mode Commande
  • Changer le type de cellule: Code -> Markdown : touche M en mode Commande
  • Changer le type de cellule: Markdown -> Code : touche Y en mode Commande
  • Ajouter une nouvelle cellule au dessus de l'actuelle: touche A (pour above) en mode Commande
  • Ajouter une nouvelle cellule en dessous de l'actuelle: touche B (pour below) en mode Commande

Exercice

  1. Suivre le tour guidé de l'interface : Help > User Interface Tour
  2. Avancer dans le notebook avec ⇧ + ↵
  3. Passer du mode Commande au mode Edition de différentes façons
  4. Ouvrez la rubrique Keyboard Shortcuts de l'aide et tenter de reproduire les actions uniquement avec les touches du clavier

Notes :

  • Vous pouvez vous servir de votre copie d'un notebook pour faire office de bloc-notes : vous pouvez rajouter des cellules de texte pour vos commentaires et des cellules de code pour vos essais de résolution d'exercices.
  • Ctrl + S pour sauver vos modifications

Exercice :

  1. Ajoutez une cellule de texte ci-dessous (touches B puis M) et insérez une note.
  2. Ajoutez une cellule de code ci-dessous (touche B) et insérez un exemple de code.

Le langage Python

  • Langage interprété, originellement écrit en C
  • Open-source, portable et disponible sur Unix, Windows, MacOS, etc.
  • Syntaxe claire et simple
  • Orienté objet
  • Types nombreux et puissants
  • Interfaces avec de nombreux autres langages et librairies
  • Large spectre d'applications

Plus d'informations sur wikipedia ou sur le site officiel de python.

Historique

La genèse du langage date de la fin des années 80. Guido van Rossum, alors à l'Institut de Recherche en Mathématiques et Informatique Hollandais (CWI) à Amsterdam a publié la version 0.9.0 de l'interpréteur en Février 1991. Il travaille maintenant pour dropbox après 7 ans chez google.

  • Plus d'histoire sur wikipedia.
  • L'histoire racontée par le créateur lui-même sur son blog sous forme d'anecdotes.

Un langage en forte croissance

Dans cet article de 2017, le site stackoverflow.com relevait la forte croissance de Python par rapport aux autres langages depuis 2012.

Depuis cet article, la tendance mensuelle des requêtes Stackoverflow s'est poursuivie. On peut la suivre sur https://insights.stackoverflow.com/. En mai 2022, elle donne :

Croissance Python par rapport autres langages

Qu'est-ce qu'un langage interprété ?

  • Ordinateur $\rightarrow$ CPU $\rightarrow$ jeu d'instructions (ISA) $\rightarrow$ langage binaire
  • Un langage de programmation permet d'écrire des programmes dans des langages mieux adaptés aux humains, mais nécessite une étape de traduction.
  • Comme pour une langue étrangère, il nous faut un traducteur ou un interprète...
    • Le traducteur va lire le texte et en produire une version dans la langue étrangère.
    • L'interprète va lire le texte, et pendant sa lecture, effectuer la traduction en direct.
  • Pour un langage informatique, c'est quasiment pareil, nous avons des compilateurs et des interpréteurs)
    • Les compilateurs, traduisent tout le code source en langage binaire utilisable directement par le CPU.
    • L'interpréteur lit une partie du code source et exécute directement les instructions binaires qui correspondent et passe à la suite.

Un langage interprété sera souvent moins rapide qu'un langage compilé, car les optimisations sont plus faciles a réaliser lors d'une compilation.

Cette différence a tendance a s'estomper avec l'apparition des techniques suivantes:

  • JIT : compilation à la volée (Just In Time compilation)
  • RTTS : spécialisation de types au moment de l'exécution (Run Time Type Specialization)

Une autre possibilité pour contourner la lenteur d'exécution d'un langage est de faire appel à des bibliothèques externes programmées dans un langage compilé et optimisées. C'est très efficace pour les parties du code qui sont utilisées de manière répétitive.

Figure inspirée du livre Apprendre à programmer en Python de G. Swinnen.

Quelques interpréteurs Python

Exécution d'un programme Python

Dans la console Python interactive

La commande python lance la console interactive python dans laquelle on peut exécuter le code directement :

$ python
Python 3.9.6 (default, Jun 29 2021, 06:20:32) 
[Clang 12.0.0 (clang-1200.0.32.29)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 2
>>> print(a)
2
>>>

Depuis la console système

On peut l'exécuter en paramètre de la ligne de commande

$ python -c 'a=3;print(a)'

Sous windows:

cmd
C:\> python.exe -c 'a=3;print(a)'

On peut exécuter un fichier (par exemple test.py) contenant notre code

$ python test.py

On peut exécuter directement un fichier python contenant notre code, grâce à l'utilisation du mode script avec, en rajoutant en première ligne du fichier:

#! python

Après avoir rendu le fichier exécutable

$ chmod a+x test.py

Ensuite il peut être exécuté sans le précéder par le nom de l'interpréteur :

$ ./test.py

Dans la console iPython

Le terminal interactif iPython peut s'utiliser comme alternative à la console Python classique pour ses fonctionnalités :

  • syntaxe additionnelle
  • complétion
  • commandes système
  • historique enrichi

Aperçu du terminal ipython :

$ ipython
Python 3.6.2 |Anaconda custom (x86_64)| (default, Sep 21 2017, 18:29:43) 
Type 'copyright', 'credits' or 'license' for more information
IPython 6.4.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]:

Un exemple d'utilisation

Sauvegarde de l'historique des commandes avec la magic function %save

$ ipython
[...]

In [1]: print('- Hello world!')
- Hello world!

In [2]: R = 'Hello you! '

In [3]: print(R*6)
Hello you! Hello you! Hello you! Hello you! Hello you! Hello you! 

In [4]: %save hello.py 1-3
The following commands were written to file `hello.py`:
print('- Hello world!')
R = 'Hello you! '
print(R*6)

In [5]: quit

Au sein d'un notebook Jupyter

Les cellules de type code vous donnent accès à une console qui inclut la plupart des fonctionnalités de la console iPython.

Exercice :

  1. Exécuter la cellule de code ci-dessous et observez le résultat
  2. Exécuter cette cellule une deuxième fois, observez la différence
In [2]:
print('- Hello world!')
R = '- Hello you!\n'
print(R*6)
%history
- Hello world!
- Hello you!
- Hello you!
- Hello you!
- Hello you!
- Hello you!
- Hello you!

print('Hello world!')
print('- Hello world!')
R = '- Hello you!\n'
print(R*6)
%history

Utilisation d'un IDE (Environnement de développement intégré)

Un grand nombre d'IDE sont disponibles pour Python (cf. la revue wikipedia et la revue wiki.python.org).

Citons simplement :

  • IDLE : l'IDE par défaut de Python.
  • Spyder : l'IDE qui sera utilisé pour certains exercices de ce cours.
  • Pycharm : une alternative moins libre que Spyder mais avec de nombreuses fonctionnalités comme le support pour les outils de suivi de version ou la complétion automatique.
  • VSCode : un IDE gratuit, non limité à Python, aux fonctionnalités très riches grâce à son système d'extensions.

Pourquoi un IDE ?

Dans un IDE, on dispose d'outils intégrés dans une interface (généralement) intuitive :

  • débugueur
  • analyseur de variables
  • outils d'introspection de code
  • outils de coloration et de correction syntaxique
  • raccourcis d'exécution
  • profileurs de code

Applications du langage Python

Python est un langage complet, utilisable dans un grand nombre de domaines.

Grand public

Mais aussi

  • openstack - gestionnaire de cloud
  • yum - installeur de paquets redhat, centos
  • softimage - modelage et rendu 3D
  • maya - modelage et rendu 3D
  • inkscape - éditeur de graphiques vectoriels
  • gnuradio - SDR (software defined radio) toolkit

Et encore plus d'exemples sur wikipedia.

Intérêt pour les sciences

Pour un usage scientifique, Python est intéressant à plusieurs titres. En effet, il est capable de réaliser de manière automatique et efficace un certain nombre de tâches qui sont le quotidien des scientifiques :

  • Manipuler et traiter des données de simulations ou d'expériences
  • Visualiser des résultats
  • Communiquer ses résultats sous la forme de données numériques formatées, de figures ou d'animations
  • Dans le domaine du calcul scientifique, Python est particulièrement riche en fonctionnalités grâce à la contribution importante de la communauté des mathématiques et du calcul à travers le projet SciPy.

Le Python scientifique

1. Développement de code de simulation

Bien que généralement moins performant que les langages compilés (C, C++ ou Fortran), Python est particulièrement intéressant et agréable à programmer dans les phases de développement pour tester rapidement de nouvelles méthodes. Une fois le prototypage terminé, il est possible de porter les parties critiques du code vers un langage compilé plus rapide, tout en gardant le reste en python.

2. Traitement de données

  • langage de haut niveau produisant du code agréable à lire (par opposition à excel, par exemple...)
  • nombreux modules spécialisés (algèbre, statistique, traitement d'images, etc.)
  • le concept des notebooks Jupyter qui combinent de l'exécution de code, du texte formaté, des formules mathématiques (via LaTeX), des tracés et du contenu média

3. Tracés graphiques :

  • tracés 1D, 2D voire 3D
  • animations

Les principaux paquets dédiés au Python scientifique :

  • NumPy : calcul numérique, opérations mathématiques sur tableaux et matrices de grandes dimensions
  • SciPy : ensemble d'outils scientifiques pour le traitement de signal, d'images, algèbre lineaire, etc...
  • Sympy and SAGE : bibliothèques et outils mathématiques pour le calcul symbolique
  • Matplotlib : tracer et visualiser des données sous forme graphique, à la matlab ou mathematica
  • Pandas : analyser vos données
  • TensorFlow : bibliothèque d'apprentissage machine développée par Google
  • Scikit-learn : apprentissage machine, fouille et analyse de données
  • BioPython : problèmes de biologie : génomique, modélisation moléculaire, etc...
  • AstroPy : bibliothèque communautaire dédiée à l'astronomie

Python plutôt que Matlab ?

Constat

  • On dispose ainsi d'un outil très complet et performant qui représente une alternative sérieuse aux outils commerciaux tels que Matlab, Maple, Mathematica, etc.
  • Le site scipy-lectures fournit de bons pointeurs vers les applications scientifiques de Python avec Scipy.

Alors ?

Documentation et sources

La documentation

Les sources de ce support

Quelques ressources qui ont inspiré le contenu de ce cours et qui pourront vous servir pour aller plus loin...

avec le langage

avec les notebooks Jupyter

  • Ce qu'on peut écrire en Markdown et en LaTeX dans les notebooks Jupyter et ce qu'on peut faire dans les cellules de code dans cette série de tutoriels
  • Pour mettre vos notebooks en ligne : nbviewer, binder

en s'entrainant