Skip to content
GitLab
    • Explore Projects Groups Topics Snippets
Projects Groups Topics Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Register
  • Sign in
  • PYTHON - Atelier MatPlotLib PYTHON - Atelier MatPlotLib
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributor statistics
    • Graph
    • Compare revisions
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Package Registry
    • Terraform modules
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar

En prévision de l'arrivée de la forge institutionnelle INRAE, nous vous invitons à créer vos nouveaux projets sur la forge MIA.

  • Poulard Christine
  • PYTHON - Atelier MatPlotLibPYTHON - Atelier MatPlotLib
  • Wiki
  • Python_quelques bases

Python_quelques bases · Changes

Page history
Update Python_quelques bases authored 2 years ago by Poulard Christine's avatar Poulard Christine
Hide whitespace changes
Inline Side-by-side
Showing
with 53 additions and 56 deletions
+53 -56
Python_quelques-bases.md
View page @ a86f7324
......@@ -4,9 +4,8 @@ Normalement, on commence par les bases et on évoque ensuite des propriétés pl
:books: Pour commencer, vous pouvez tester le [tuto officiel :three:.:one: :zero:](https://docs.python.org/3.10/tutorial/index.html) ou trouver un cours en ligne qui vous correspondra ; vous pouvez consulter [ma sélection](Tutographie).
:bulb: Pour mieux comprendre, n'hésitez pas à exécuter des petits bouts de code sur le site : :bulb: [PYTHON TUTOR](http://pythontutor.com) :bulb:
PYTHON TUTOR est un outil pédagogique, qui exécute du code en ligne, pas à pas, en représentant graphiquement tous les **objets** créés (chiffres, chaînes de caractères et conteneurs (listes, tuples...) contenant les objets élémentaires), et ceci dans leurs espaces de nommage respectifs, avec les liens avec les noms de variables.
:bulb: PYTHON TUTOR est votre allié ! :bulb:
:bulb: n'hésitez pas à tester des bouts de code sur le site [PYTHON TUTOR](http://pythontutor.com) ! C'est est un outil pédagogique, qui exécute du code en ligne, pas à pas, en représentant graphiquement tous les **objets** créés (chiffres, chaînes de caractères et conteneurs (listes, tuples...) ), et ceci dans leurs espaces de nommage respectifs, avec les liens avec les noms de variables.
Cela vous permettra en particulier de voir comment la modification d'une variable impacte (ou pas) certaines autres.
Il est limité par le nombre d'instructions, et ne permet pas l'import de modules (en particulier, pas de matplotlib...)
......@@ -79,21 +78,21 @@ print("fini") # l'indentation a cessé, on a quitté le bloc
print (ma_liste)
```
Le programme se déroule comme suit :
1
après modification 3
2
après modification 4
5
après modification 7
10
après modification 12
50
après modification 52
<kbd>1</kbd>
<kbd>après modification 3</kbd>
<kbd>2</kbd>
<kbd>après modification 4</kbd>
<kbd>5</kbd>
<kbd>après modification 7</kbd>
<kbd>10</kbd>
<kbd>après modification 12</kbd>
<kbd>50</kbd>
<kbd>après modification 52</kbd>
Et pourtant, à la fin print(ma_liste) montre que la liste est inchangée !
La ligne " element = element + 2" a bien modifié l'élément extrait de la liste, mais n'a pas modifié la liste...)
La ligne `"element = element + 2` a bien modifié l'élément **extrait de la liste**, mais n'a pas modifié l'objet **dans** liste...
On peut vérifier sur [cette capture d'écran Python Tutor](https://gitlab.irstea.fr/christine.poulard/atelier-matplotlib/-/blob/master/python_tutor_modif_elements_liste.png) que au cours de la 2e itération la variable element qui valait 2 (2e élément de la liste) est bien passée de 2 à 4, mais que cela n'a pas du tout modifié la liste originale.
On peut vérifier sur [cette capture d'écran Python Tutor](https://gitlab.irstea.fr/christine.poulard/atelier-matplotlib/-/blob/master/python_tutor_modif_elements_liste.png) que au cours de la 2e itération la variable `element` qui valait 2 (2e élément de la liste) est bien passée de 2 à 4, mais que cela n'a pas du tout modifié la liste originale.
Une manière de transformer la liste en ajoutant deux consiste à recréer une liste :
```python
......@@ -119,17 +118,16 @@ ma_liste = [1, 2, 5, 10, 50] # une liste d'entiers
for rang, element in enumerate(ma_liste):
print("L'élement de rang ",rang, " est :", element)
```
L'élement de rang 0 est : 1
L'élement de rang 1 est : 2
L'élement de rang 2 est : 5
L'élement de rang 3 est : 10
L'élement de rang 4 est : 50
<kbd>L'élement de rang 0 est : 1</kbd>
<kbd>L'élement de rang 1 est : 2</kbd>
<kbd>L'élement de rang 2 est : 5</kbd>
<kbd>L'élement de rang 3 est : 10</kbd>
<kbd>L'élement de rang 4 est : 50</kbd>
Hé oui, les indices commencent à zéro !
Parcourons maintenant deux listes en parallèle, en prenant à chaque itération un élément de même rang, comme une fermeture éclair parcourt deux bords crantés : *zip*
```python
ma_liste_numeros = [1, 2, 5, 10, 50] # une liste d'entiers
ma_liste_mots = [ "un", "deux", "cinq", "dix", "cinquante" ]
......@@ -137,11 +135,11 @@ for numero, mot in zip(ma_liste_numeros, ma_liste_mots):
print("Le numéro ",numero, " s'écrit :", mot)
```
Le numéro 1 s'écrit : un
Le numéro 2 s'écrit : deux
Le numéro 5 s'écrit : cinq
Le numéro 10 s'écrit : dix
Le numéro 50 s'écrit : cinquante
<kbd>Le numéro 1 s'écrit : un</kbd>
<kbd>Le numéro 2 s'écrit : deux</kbd>
<kbd>Le numéro 5 s'écrit : cinq</kbd>
<kbd>Le numéro 10 s'écrit : dix</kbd>
<kbd>Le numéro 50 s'écrit : cinquante</kbd>
### A3) Les fonctions
La fonction est un objet comme les autres (ou presque) !
......@@ -198,9 +196,9 @@ On peut remplacer **self** par **this**, comme en java ; ce n'est pas du tout re
return aplusb
```
machin = MonObjet(4,5,6)
`machin = MonObjet(4,5,6)`
bidule = machin.ma_methode(1,2)
`bidule = machin.ma_methode(1,2)`
Un point de vocabulaire : **paramètres** et **arguments**
En Python vous trouverez ces deux termes. Pour la documentation des fonctions (les "docstrings"), qui est une bonne pratique [recommandée dans les PEPs](https://peps.python.org/pep-0257/), sphinx "paramètres" de les définir comme `:param nom_variable: ` ([Sphinx](https://sphinx-rtd-tutorial.readthedocs.io/en/latest/docstrings.html) ) tandis que le format Google utilise Argas... Attributes:
......@@ -341,33 +339,32 @@ print(ma_liste_mots) # la liste n'a pas été modifiée
```
Le code ci-dessus affiche :
bonjour
Nous sommes dans la fonction, on a passé en argument bonjour
dzień dobry
teraz mówimy po polsku
Chopin
Le numéro 1 s'écrit : jeden
Le numéro 2 s'écrit : dwa
Le numéro 5 s'écrit : pięć
Le numéro 10 s'écrit : dziesięć
Le numéro 50 s'écrit : pięćdziesiąt
Le numéro 100 s'écrit : sto
None
Nous sommes sortis de la fonction, on a passé en argument bonjour
ici on parle français
[1, 2, 5, 10, 50, 100]
['un', 'deux', 'cinq', 'dix', 'cinquante']
Sur la [Copie d'écran de Python tutor, code en cours d'exécution à pas à pas](https://gitlab.irstea.fr/christine.poulard/atelier-matplotlib/-/blob/master/python_tutor_chiffres_en_polonais.png), on remarque qu'il y a en mémoire 2 versions différentes de ma_liste_mots, dont une dans l'espace de nommage de la fonction, qui a été créée par l'instruction ma_liste_mots=[ ...]. La liste ma_liste_numeros n'existe en revanche qu'en un seul exemplaire.
<kbd>bonjour</kbd>
<kbd>Nous sommes dans la fonction, on a passé en argument bonjour</kbd>
<kbd>dzień dobry</kbd>
<kbd>teraz mówimy po polsku</kbd>
<kbd>Chopin</kbd>
<kbd>Le numéro 1 s'écrit : jeden</kbd>
<kbd>Le numéro 2 s'écrit : dwa</kbd>
<kbd>Le numéro 5 s'écrit : pięć</kbd>
<kbd>Le numéro 10 s'écrit : dziesięć</kbd>
<kbd>Le numéro 50 s'écrit : pięćdziesiąt</kbd>
<kbd>Le numéro 100 s'écrit : sto</kbd>
<kbd>None</kbd>
<kbd>Nous sommes sortis de la fonction, on a passé en argument bonjour</kbd>
<kbd>ici on parle français</kbd>
<kbd>[1, 2, 5, 10, 50, 100]</kbd>
<kbd>['un', 'deux', 'cinq', 'dix', 'cinquante']</kbd>
Sur la [Copie d'écran de Python tutor, code en cours d'exécution à pas à pas](https://gitlab.irstea.fr/christine.poulard/atelier-matplotlib/-/blob/master/python_tutor_chiffres_en_polonais.png), on remarque qu'il y a en mémoire 2 versions différentes de `ma_liste_mots`, dont une dans l'espace de nommage de la fonction, qui a été créée par l'instruction ma_liste_mots=[ ...]. La liste `ma_liste_numeros` n'existe en revanche qu'en un seul exemplaire.
d) *une méthode modifie l’objet en place ou en renvoie un nouveau* selon le cas…
Bien vérifier dans la doc comment se comporte la méthode que l’on utilise ! ! !
Selon les cas, une *méthode* peut :
* modifier un objet (exemple *append*) ; en général elles retournent « None »
* modifier un objet (exemple *append*) ; en général elles retournent « `None` »
* retourner un nouvel objet sans modifier le premier
* laisser le choix (argument *inplace*=True ou =False) :
* laisser le choix (argument *inplace*=`True` ou =`False`) :
Exemples courants pour comprendre
méthode *sort* _vs_ fonction *sorted*
......@@ -436,10 +433,10 @@ Ce qui va donner à l'appel de fonction suivant :
```python
affichage_hybride("param1", "param2", "infini1", "infini2", kwinfini1=1, kwinfini2=2)
```
param1
param2
('infini1', 'infini2')
{'kwinfini1': 1, 'kwinfini2': 2}
<kbd>param1 </kbd>
<kbd>param2 </kbd>
<kbd>('infini1', 'infini2') </kbd>
<kbd>{'kwinfini1': 1, 'kwinfini2': 2} </kbd>
On va expliquer tout ça dans la suite, et vous pouvez également regarder les 2 tutos mis en ref ci-dessus. Et surtout, MANIPULEZ
......@@ -477,9 +474,9 @@ print (ma_fonction(2,5)) # je n'ai pas précisé nb_decimales donc nb_decimales
print (ma_fonction(2,5, nb_decimales=5 )) # je précise nb_decimales
print (ma_fonction(b=5,a=2, nb_decimales=5 )) # si je précise les noms, je peux intervertir les arguments "de position"
```
2 divisé par 5 = 0.40
2 divisé par 5 = 0.40000
2 divisé par 5 = 0.40000
<kbd>2 divisé par 5 = 0.40</kbd>
<kbd>2 divisé par 5 = 0.40000</kbd>
<kbd>2 divisé par 5 = 0.40000</kbd>
**nombre indéfini d'arguments *args avec le _splat_ (*)**
......
Clone repository

Accueil ("Home")


Python, astuces et outils
  • Gestion des versions de Python des paquets (en construction) pip, venv, poetry
  • Python_modules_du_developpeur
    • La doc avec Sphinx

Matplotlib, ateliers et points théoriques

Présentation des ateliers, avec galerie

  • le problème des versions
  • notes sur la version 3.5
  • bien exploiter la doc : les infos des méthodes
  • Atelier A Bases en Python utiles pour comprendre mpl
  • Atelier B graphiques simples
    • suite, lire un fichier
    • focus méthode scatter
    • focus méthodes step et bar
  • Atelier C : les objets d'une figure graphiques avec plusieurs unités
    • Point Théorie Subplots
  • Atelier D : cartes, heatmaps et leurs légendes
    • suite, les fichiers binaires extraire une matrice avec np.fromfile
    • focus : redimensionnement d'une carte "zoom"
  • Atelier E : cas des longues chroniques
  • Atelier G : interactivité widgets, toolbar et événements
    • focus : les événements "MouseEvent"
  • définir un style, obtenir des étiquettes de dates correctes focus plt.rcParams
  • Atelier H : tracé efficace sur données tabulaires : seaborn (pandas et mpl à venir) focus seaborn
Interfaces graphiques (GUI)
  • Un outil complet avec gestion des signaux et internationalisation: QT

  • Lexique
  • Tutographie

  • Pour les contributeurs
  • Sidebar

Menu

Explore Projects Groups Topics Snippets