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_modules_du_developpeur
Last edited by Poulard Christine 2 years ago
Page history

Python_modules_du_developpeur

notes suites à la formation avancée Python (intervenant : K. Samuel, mai et Août 2022)

:construction_worker: toujours en construction :construction_worker:

Introduction : rappel des conventions de nommage

I - Les modules à connaître (cette page, en construction)

II - La structuration de code (à venir)

Introduction : rappel des conventions de nommage

Règles de nommage : peu de choses sont interdites en Python, mais un nom de variable doit commencer par une lettre (:robot: 6Po n'est pas un nom valide) et bien sûr certains noms sont réservés : if, for...
:warning: certains noms de méthode ou de classe sont cependant utilisables, ce qui pose problème car en nommant votre variable max ou list vous surchargez la méthode ou la classe correspondante, qui du coup n'est plus accessible ! Normalement vous devriez vous en rendre compte avec la coloration syntaxique : si le mot change de couleur c'est qu'il est reconnu par Python...

Python est un langage sensible à la "casse", c'est à dire que les lettres en minuscule sont différentes des lettres en majuscules... Donc ma_variable, MA_VARIABLE, Ma_Variable et ma_Variable sont des noms différents... De toutes façons, des conventions fortement recommandées vont guider l'utilisation des majuscules. Ainsi, vous aurez une idée de la nature d'un objet rien que par la manière dont les majuscules et les underscore ( _ ) sont présents ou pas... ** Résumé en quatre lignes de principales conventions de nommage :

from monmodule import MaClasseQueJaiCree
MA_CONSTANTE = 42  # mais c'est une convention, techniquement je peux la faire passer à 43
ma_variable_est_une_instance_de = MaClasseQueJaiCree()

Détail des principales conventions : rien n'est obligatoire en Python, mais il est fortement recommandé de respecter les conventions suivantes pour faciliter la lecture d'autres codes, notamment :

  • noms de variables : :snake: en snake-case, les mots sont en minuscules et reliés par des underscore qui le font ressembler à un animal articulé : ma_variable_peut_avoir_un_nom_assez_long
  • noms de classes : :camel: en CapWords, autrement dit UpperCaseCamelCase : un nom qui commence par une capitale, ou plusieurs mots collés avec chacun une capitale, ce qui crée des bosses dans le nom : MaClasseQuiFaitUnTrucSympa. Les instances de classe seront écrites en snake-case : instance_de_la_classe_sympa = MaClasseQuiFaitUnTrucSympa()
  • noms de constantes : en snake-case majuscule ("SCREAMING_SNAKE_CASE") : COEFFICIENT, CODE_LACUNE. :warning: ce n'est qu'une convention donc en pratique vous pouvez modifier vos constantes en cours de programme...
  • noms de modules : en minuscules, en évitant les underscores
  • (il y en a d'autres, voir les [PEP8](https://www.python.org/dev/peps/pep-0008/], [éventuellement en chanson...]https://youtu.be/hgI0p1zf31k))

I - Les modules à connaître

Les amis du développeurs !

  1. Instructions en ligne de commande

  2. Les environnements virtuels

  3. les modules utiles en débugage (mais pas seulement) :

    • black : pour respecter les recommandations de mise en page
    • type hints et typing : si l'IDE connaît les types il proposera les bonnes complétions
    • try/except, modules warning et logging (+ context managers ?)
    • vérifier et pré-traiter les arguments passés lors d'une instanciation : pydantic et ses validators ; properties et Descriptors
    • mode debug (breakpoints, ...) profiler et débuguer
  4. les types utiles

    • module Collections : deque, frozensets, ...
  5. autre modules utiles les dates : datetime et pendulum (pour gérer les time zones) classes simplifiées (sans méthodes) : dataclasses

  6. interagir avec l'utilisateur (hors IHM et figure)

    • au plus simple : input (dans la console)
    • utiliser les fenêtres de tkinter filedialog même sans IHM
    • les fichiers de config (configparser, toml, ...)
    • argsparse : gérer les arguments passés en ligne de commande après le script ($ mon_programme.py --arg1

X. les modules qui aident à la distribution de code pip* les bases et un peu plus poetry pour la gestion des environnements virtuels

1. Instructions en ligne de commande dans un terminal (langage shell):

Premier conseil : installer un meilleur outil pour le shell Sous windows 10 : WINDOWS TERMINAL (nécessite les droits d'admin) ou CMDER

(en construction ; selon les tests en cours on parlera ici des modules toml pour les fichiers de configuration, de et de [typing] de la librairie standard pour définir des types (type hints)

à citer encore : pprint ...

II-Structurer du code

Ref: https://openclassrooms.com/fr/courses/7160741-ecrivez-du-code-python-maintenable/7188702-structurez-une-application-avec-le-pattern-d-architecture-mvc

  • respecter les conventions pour le rendre facile à lire donc à maintenir

  • éviter les "magic numbers", id les nombres dont on ne sait plus ce qu'ils sont Utiliser des 'constantes' explicites pour faciliter les modifications ultérieures (sachant qu'un "replace' pourrait avoir des effets de bord, un même nombre pouvant signifier des choses différentes !

NB_MINUTES_DANS_UNE_HEURE = 60
TEMPS_PAUSE_EN_SECONDES = 60
PAS_DE_TEMPS_DES_DONNEES_EN_MINUTES = 5

=> Notion de "design pattern contant"

  • factoriser les actions dès que possible des instructions qui se répètent sont à transformer en fonction séparées, voire en décorateur

  • structurer OpenCLasRoomStructurez_MVC Le MVC est une approche d’architecture de logiciel. Il divise les responsabilités du système en 3 parties distinctes :

    Modèle : Le modèle contient les informations relatives à l’état du système. Ce sont les fonctionnalités brutes de l’application.

    Vue : La vue présente les informations du modèle à l’utilisateur. Elle sert d’interface visuelle et/ou sonore pour l’utilisateur.

    Contrôleur : Le contrôleur garantit que les commandes utilisateurs soient exécutées correctement, modifiant les objets du modèle appropriés, et mettant à jour l’application. C’est finalement les rouages de l’application, et c’est la couche qui apporte une interaction avec l’utilisateur.

  • les principes SOLID

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