Objectifs
Cette formation Python de niveau Avancé vous apprend les bonnes pratiques de programmation avec Python.
Lors de ce cours, les participants approfondissent leur expérience de la programmation avec Python pour rendre leurs applications fiables et stables et pour appliquer des design patterns (patrons de conception) qui leur permettront de résoudre les principales difficultés qu'ils rencontrent dans la conception de logiciels avec Python.
Concrètement, à l'issue de ce cours les participants auront acquis toutes les capacités nécesssaires pour :
-
Appliquer des design patterns et des bonnes pratiques pour développer des applications avec Python
-
Exploiter des fonctionnalités avancées de programmation Python pour concevoir des programmes fiables
-
Créer et gérer des threads de contrôle concurrents
-
Générer des requêtes et des réponses aux services Web REST et utiliser les données renvoyées
-
Suivre l'exécution du programme et améliorer les performances
-
Lancer des tests unitaires sur les programmes et les modules Python, les installer et les distribuer.
A qui s'adresse cette formation
Public :
Cette formation est destinée aux programmeurs, développeurs, ingénieurs en logiciels, testeurs et responsables techniques souhaitant approfondir leurs connaissances du langage Python.
Prérequis :
Afin de suivre ce stage, il est nécessaire d'avoir suivi la formation Python ou de posséder les connaissances équivalentes telles qu'une expérience professionnelle d'au moins 3 mois de programmation avec Python.
Contenu du cours
Programmation orientée objet avec Python
Étendre les classes pour définir des sous-classes
Hériter des plusieurs super-classes et classes mixin
Ajouter des propriétés à une classe
Définir des classes abstraites de base
Fonctionnalités Pyhton
Écriture de code Python
Personnaliser les itérations et les indexations avec des méthodes « magiques »
Modifier le code de façon dynamique avec le « monkey patching »
Traitement des exceptions
Lever des exceptions personnalisées
Réduire la complexité du code avec les gestionnaires de contexte et l'instruction with
Vérification du code et tests unitaires
Tests : Les bonnes pratiques
Développer et lancer des tests unitaires Python
Simplifier les tests automatiques avec le paquetage Nose
Vérification du comportement du code
Investiguer les dépendances entre objets avec le paquetage Mock
Mettre en œuvre les assertions avec le paquetage MagicMock
Recherche des erreurs et techniques de débogage
Identification des erreurs
Journaliser les messages pour les audits et le débogage
Vérifier le code à la recherche de bogues avec PyLint
Débogage du code Python
Extraire les informations sur les erreurs à partir des exceptions
Suivre l'exécution du programme avec l'environnement de développement intégré PyCharm
Design patterns Python
Patrons structurels
Mettre en œuvre les patrons décorateurs avec @
Contrôler les accès à un objet avec le patron Proxy
Patrons comportementaux
Utiliser le patron d'itération avec les générateurs Python
Définir un algorithme squelette avec le patron de méthode
Autoriser des couplages lâche entre classes avec le patron observateur
Interface avec les clients et les services Web REST
Services Web REST Python
Développer un service REST
Générer des réponses JSON pour des clients Ajax
Clients REST Python
Envoyer des requêtes REST depuis un client Python
Utiliser les données JSON et XML renvoyées
Mesure et amélioration de la performance de l'application
Mesurer l'exécution de l'application
Chronométrer l'exécution des fonctions avec le module « timeit »
Suivre l'exécution du programme via « cProfile »
Manipuler le suivi de l'exécution de manière interactive avec « pstats »
Les fonctionnalités du langage Python pour l'optimisation des performances
Déterminer les structures de données efficaces parmi listes, dictionnaires et tuples
Transformer et filtrer des ensembles de données avec les compréhensions
Remplacer l'interpréteur traditionnel Python par PyPy
Installation et distribution de modules
Gestion des versions des modules
Installer les modules depuis le dépôt PyPi avec pip
Portabilité du code entre les différentes versions de Python
Paquetage des modules et des applications Python
Définir des environnements Python isolés avec « virtualenv »
Préparer la distribution d'un paquetage avec « setuptools »
Importer les modules Python dans un dépôt local
Exécution en parallèle
Processus légers (threads)
Créer et gérer plusieurs threads de contrôle avec la classe Thread
Synchroniser des threads avec des verrous
Traitements lourds
Exécuter des commandes du système d'exploitation comme sous-processus
Synchroniser des processus avec les files d'attente
Exécuter des traitements en parallèle avec les groupes de processus et des exécuteurs