[{"data":1,"prerenderedAt":45},["ShallowReactive",2],{"course-python-perfectionnement":3,"highlight-python-import asyncio\nimpor":44},{"id":4,"name":5,"slug":6,"location":7,"targetAudienceFormatMarkdown":8,"prerequisitesFormatMarkdown":9,"objectivesFormatMarkdown":10,"descriptionFormatMarkdown":11,"teachingMethodsFormatMarkdown":12,"teachingResourcesFormatMarkdown":13,"evaluationMethodsFormatMarkdown":14,"accessibilityFormatMarkdown":15,"accessMethodsFormatMarkdown":16,"minimumParticipants":7,"maximumParticipants":7,"duration":17,"reference":18,"trainerType":7,"updated_at":19,"created_at":20,"price":21,"organizationMode":22,"theme":25,"code":29,"tags":34,"metadata":35},"/api/courses/0b602e5c-b298-11f1-a993-d8ca06000363","Python : perfectionnement","python-perfectionnement",null,"Développeurs Python expérimentés, ingénieurs plateforme, développeurs devant optimiser ou industrialiser du code Python.","Pratique confirmée de Python, y compris de la programmation objet.","Maîtriser les mécanismes avancés : typage, décorateurs, asynchronisme, performance et packaging.","--day1--\n\n## Mécanismes du langage\n\n-   Espaces de noms et résolution ; fonctions de première classe et fermetures ; décorateurs de fonction et de classe ; métaclasses et cas d'usage réels.\n\n--break--\n\n## Itérateurs et générateurs\n\n-   Protocole d'itération ; générateurs et expressions génératrices ; itertools ; traitement de flux et données volumineuses en mémoire contrainte.\n\n--day2--\n\n## Asynchronisme\n\n-   Boucle d'événements et coroutines ; asyncio en pratique ; clients HTTP asynchrones ; comparaison avec threads et processus ; GIL et ses évolutions récentes.\n\n--break--\n\n## Performance\n\n-   Profilage (cProfile, py-spy) ; structures de données adaptées ; vectorisation avec NumPy ; mise en cache ; extensions natives et alternatives.\n\n--day3--\n\n## Typage avancé et robustesse\n\n-   Annotations avancées, génériques, protocoles ; validation de données (pydantic) ; gestion fine des erreurs ; conception d'API internes.\n\n--break--\n\n## Empaquetage et distribution\n\n-   Construction de paquets ; versionnement et publication ; intégration continue ; conteneurisation d'une application Python ; préparation PCPP1 (en option).","Présentiel, distanciel, hybride","Les supports pédagogiques sont remis aux stagiaires sous format numérique et/ou papier selon les modalités de la formation.\n\nIls comprennent des supports de cours, des présentations, des fiches pratiques, des études de cas, des exercices applicatifs ainsi que des QCM d’entraînement selon la formation. (adapté au choix du formateur)\n\nLes formations s’appuient sur des moyens techniques adaptés : ordinateurs, logiciels professionnels, connexion internet, écran ou vidéoprojecteur, ainsi que des outils collaboratifs et de visioconférence pour les formations à distance.\n\nL’ensemble des supports pédagogiques est accessible pendant et après la formation afin de favoriser l’appropriation et la mise en pratique des compétences acquises.","En amont de la formation, un recueil des besoins permet de récolter des informations sur le stagiaire et ses attentes. L’évaluation se fait en cours de formation, par des études de cas ou des travaux pratiques. En fin de formation, par un questionnaire d’auto-évaluation et/ou un examen.\n\nUn suivi de qualité est effectué grâce à nos sessions en groupe restreint (entre 2 et 9 participants maximum). Le stagiaire émargera par demi-journée et recevra une attestation de formation.","Nous informons l’ensemble de nos clients et stagiaires que nous sommes dans la capacité d’adapter les sessions selon les handicaps et les situations spécifiques. Nous nous engageons à répondre à toutes vos demandes sous un délai de 48h ouvré.","Si l’une de nos formations vous intéresse, contactez-nous au +33 4 93 65 34 24 ou à l’adresse mail contact@m2g-intellect.fr. Selon votre besoin et vos attentes, nous organiserons un échange téléphonique avec le formateur pressenti afin d’adapter la formation et ses modules, puis nous vous adresserons un devis.\n\nLes dates de la formation seront à convenir sous 30 jours maximum.","21.00","L1-DEV-13","2026-09-18T09:45:10+00:00","2026-09-17T15:02:32+00:00","2180.00",{"id":23,"name":24},"/api/organization_mode_types/6","HYBRID",{"id":26,"name":27,"slug":28},"/api/themes/0ac148c3-b298-11f1-a993-d8ca06000363","Développement logiciel informatique et web","developpement-logiciel-informatique-et-web",{"id":30,"label":31,"domain":32},"/api/training_specialities/163","326 - Informatique, traitement de l’information, réseaux de transmission des données",{"label":33},"32 - Communication et information",[],{"desc-accroche":36,"Description":37,"icon-color":38,"icon-name":39,"code-langage":40,"code-snippet":41,"courte-description":42,"titre-accroche":43},"Approfondissez typage statique, décorateurs, générateurs, programmation asynchrone avec async/await, profilage de performance et empaquetage d'un projet Python distribuable.","Cette formation s'adresse à des développeurs Python déjà expérimentés qui veulent comprendre les mécanismes internes du langage plutôt que les utiliser par habitude. Elle traite le typage statique et les outils de vérification, l'écriture et la composition de décorateurs, les générateurs pour traiter des flux de données sans les charger intégralement en mémoire, ainsi que la programmation asynchrone avec async/await pour des traitements à forte latence d'entrées-sorties. Un volet performance couvre le profilage, l'identification des goulots d'étranglement et les stratégies d'optimisation, chaque amélioration étant chiffrée avant d'être adoptée plutôt que suivie par intuition. La formation se termine par l'empaquetage d'un projet Python. Elle s'adresse aux développeurs Python expérimentés, aux ingénieurs plateforme et aux équipes devant optimiser du code Python.","#3776AB","mdi:language-python","python","import asyncio\nimport functools\n\ndef chronometrer(fn):\n    @functools.wraps(fn)\n    async def wrapper(*args, **kwargs):\n        debut = asyncio.get_event_loop().time()\n        resultat = await fn(*args, **kwargs)\n        print(f\"{fn.__name__} : {asyncio.get_event_loop().time() - debut:.3f}s\")\n        return resultat\n    return wrapper\n\n@chronometrer\nasync def recuperer_donnees(url):\n    async with session.get(url) as resp:\n        return await resp.json()","Formation avancée Python : typage, décorateurs, générateurs, asynchronisme, performance et empaquetage, avec chaque optimisation mesurée avant adoption.","Explorez les mécanismes avancés de Python pour fiabiliser, accélérer et empaqueter du code destiné à tourner en production.","\u003Cpre class=\"hljs\">\u003Ccode class=\"language-python\">\u003Cspan class=\"hljs-keyword\">import\u003C/span> asyncio\n\u003Cspan class=\"hljs-keyword\">import\u003C/span> functools\n\n\u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">chronometrer\u003C/span>(\u003Cspan class=\"hljs-params\">fn\u003C/span>):\n\u003Cspan class=\"hljs-meta\">    @functools.wraps(\u003Cspan class=\"hljs-params\">fn\u003C/span>)\u003C/span>\n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">wrapper\u003C/span>(\u003Cspan class=\"hljs-params\">*args, **kwargs\u003C/span>):\n        debut = asyncio.get_event_loop().time()\n        resultat = \u003Cspan class=\"hljs-keyword\">await\u003C/span> fn(*args, **kwargs)\n        \u003Cspan class=\"hljs-built_in\">print\u003C/span>(\u003Cspan class=\"hljs-string\">f&quot;\u003Cspan class=\"hljs-subst\">{fn.__name__}\u003C/span> : \u003Cspan class=\"hljs-subst\">{asyncio.get_event_loop().time() - debut:\u003Cspan class=\"hljs-number\">.3\u003C/span>f}\u003C/span>s&quot;\u003C/span>)\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> resultat\n    \u003Cspan class=\"hljs-keyword\">return\u003C/span> wrapper\n\n\u003Cspan class=\"hljs-meta\">@chronometrer\u003C/span>\n\u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">recuperer_donnees\u003C/span>(\u003Cspan class=\"hljs-params\">url\u003C/span>):\n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-keyword\">with\u003C/span> session.get(url) \u003Cspan class=\"hljs-keyword\">as\u003C/span> resp:\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-keyword\">await\u003C/span> resp.json()\u003C/code>\u003C/pre>",1789717717691]