notes suites à la formation avancée Python (intervenant : K. Samuel, mai et Août 2022)
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 (
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 :
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 :
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.
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 !
-
Instructions en ligne de commande
-
Les environnements virtuels
-
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
-
les types utiles
- module Collections : deque, frozensets, ...
-
autre modules utiles les dates : datetime et pendulum (pour gérer les time zones) classes simplifiées (sans méthodes) : dataclasses
-
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
-
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
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