Généralités¶
Contenu sous licence CC BY-SA 4.0
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
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:
print('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.
- Touche
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
- Suivre le tour guidé de l'interface : Help > User Interface Tour
- Avancer dans le notebook avec ⇧ + ↵
- Passer du mode Commande au mode Edition de différentes façons
- 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 :
- Ajoutez une cellule de texte ci-dessous (touches
B
puisM
) et insérez une note.- 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.
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 :
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¶
- CPython : Implémentation de référence
- Jython : Java byte code, accès aux classes java
- IronPython : CLR byte code, accès aux classes .NET
- Pyjamas : JavaScript, Ajax, GWT
- Stackless Python : pas de pile, microthreads, coroutines
- Shed Skin : C++, typage statique
- Cython : C, compilateur créant des modules python
- Pyrex : langage proche de python, C
- Unladen Swallow : origine google, JIT, LLVM
- Pypy : JIT, RTTS, RPython $\rightarrow$ C, Java byte code, CLR byte code
- Nuitka : C, fortement compatible
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 :
- Exécuter la cellule de code ci-dessous et observez le résultat
- Exécuter cette cellule une deuxième fois, observez la différence
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
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 ?¶
- Une discussion intéressante : Python vs Matlab
- Un guide de migration : Numpy for Matlab users: guide
- Une table de conversion de la syntaxe : NumPy for MATLAB users: syntax
Documentation et sources¶
La documentation¶
- Officielle :
- Stackoverflow : Forum de questions / réponses
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¶
- Le MOOC de l'INRIA : Python 3 : des fondamentaux à l'utilisation du langage hébergé sur la plateforme FUN
- La formation du groupe Calcul : ANF "Python avancé en calcul scientifique"
- La formation de Pierre Navaro : Python pour le calcul
- Le cours de python scientifique de l'institut de science du téléscope spatial: STSCI's Scientific Python Course 2015 (en anglais)
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¶
- Site de tutorat social : Python Tutor