| name | language-python |
| title | Doctorat — Langage Python |
| description | Compétence niveau docteur en Python. Couvre CPython internals, GIL, async/await, C extensions, JIT (PyPy, Numba), memory management, descriptors, metaclasses, AST, bytecode, packaging, performance optimization, et Python pour le HPC. |
| category | research |
| lang | fr |
Doctorat : Langage Python
Présentation
Python est un langage de programmation interprété, dynamique et multi-paradigme créé par Guido van Rossum (CWI Amsterdam, 1989-1991). Conçu pour la lisibilité et la productivité, il est devenu le langage dominant en science des données, ML/IA, automatisation, prototypage et web (back-end). Son implémentation de référence est CPython (C), mais il existe PyPy (JIT), Jython (JVM), IronPython (.NET), Cython (compilé vers C).
Histoire et Contexte
- 1989-1991 : Création par Guido van Rossum (CWI, Amsterdam)
- 1994 : Python 1.0 — lambda, map, filter, reduce
- 2000 : Python 2.0 — list comprehension, cycle-detecting GC
- 2001 : Python 2.2 — types unifiés (new-style classes), descriptors, generators
- 2008-2010 : Python 2.6→2.7 ; Python 3.0
- 2015 : Python 3.5 — async/await (coroutines natives)
- 2020 : Python 3.8 — walrus operator (:=) ; fin du support Python 2
- 2021 : Python 3.10 — pattern matching structurel (match/case)
- 2022-2023 : Python 3.11 — faster CPython ; Python 3.12 — GILEX expérimental
- 2024-2025 : Python 3.13 — JIT compiler (expérimental), free-threaded Python
Architecture du Langage
- CPython internals : Compileur (parser → AST → bytecode), interpréteur (évaluation loop), GC, builtins
- Bytecode : Code intermédiaire compilé (.pyc, cache dans pycache)
- Parser : PEG parser (depuis Python 3.9) — remplace l'ancien LL(1)
- AST : Accès via ast module — transformation et génération de code
- Python/CEval loop : _PyEval_EvalFrameDefault — boucle d'exécution du bytecode
- Frame stack : Chaque appel de fonction crée un frame (objet Python)
- GIL : Global Interpreter Lock — protège l'accès aux objets Python
Système de Types
- Duck typing : Comportement, pas de type nominal
- Type hints (PEP 484) : Typage progressif
- Protocols (PEP 544) : Duck typing structurel
- Generics : TypeVar, Generic[T]
- Literal types : Literal pour les valeurs exactes
- TypedDict : Dictionnaires avec types de clés connus
- Self type : Self pour les méthodes retournant self
- Pydantic : Validation de types à l'exécution
- NewType : Crée un sous-type distinct pour la vérification statique
Compilation et Interprétation
- CPython : Interpréteur principal — compile en bytecode
- PyPy : Interpréteur Python avec JIT (beaucoup plus rapide)
- Numba : JIT spécialisé pour les calculs numériques
- Cython : Python compilé vers C
- Python 3.13 JIT : Copy-and-patch JIT (expérimental)
- Free-threaded Python (PEP 703) : Python sans GIL
Mémoire et Performances
- Garbage collector : Comptage de références + GC cyclique (3 générations)
- Allocator : PyMem (pymalloc) — pools de blocs de taille fixe
- Reference counting : ob_refcnt — libéré quand il atteint 0
- Weak references : weakref — n'incrémentent pas le comptage
- Small integer caching : Entiers -5 à 256 sont des singletons
- String interning : Chaînes courtes internées
- slots : Réduction de la mémoire en évitant dict
Écosystème et Outils
- pip : Gestionnaire de paquets officiel
- uv : Gestionnaire de paquets ultra-rapide (Rust)
- conda / micromamba : Gestionnaire multi-langages
- Poetry : Gestionnaire de projet moderne
- mypy / Pyright : Vérificateurs de types statiques
- ruff / pylint : Linters
- black / ruff format : Formateurs de code
- pytest : Framework de test
- sphinx / mkdocs : Documentation
- Jupyter : Notebooks interactifs
Concurrence et Parallélisme
- Async/await (PEP 492) : Coroutines natives avec asyncio, trio, curio
- asyncio : Boucle d'événements (event loop)
- Threading : thread — limité par le GIL pour CPU-bound
- Multiprocessing : Process — parallélisme vrai
- concurrent.futures : ThreadPoolExecutor, ProcessPoolExecutor
- Generators & coroutines : yield comme base des coroutines
- Green threads : gevent, eventlet
- Ray : Parallélisme et calcul distribué
- Dask : Parallélisme pour tableaux et dataframes
- No-GIL mode (PEP 703) : Threads CPU-bound sans GIL
Patterns Avancés
- Descriptors : Protocole get, set, delete — base de property
- Metaclasses : type comme métaclasse
- ABC : abc.ABC, abstractmethod
- Context managers : enter / exit — with statement
- Decorators : Fonctions qui modifient d'autres fonctions
- Mixin classes : Composition via héritage multiple
- Visitor pattern : Via singledispatch
Optimisation
- Profiling : cProfile, py-spy, line_profiler, scalene
- Numba : JIT pour fonctions numériques
- Cython : Compilation de Python vers C
- PyPy : Interpréteur JIT
- slots : Réduction mémoire et accès plus rapide
- Local variables : Plus rapides que les globales
- List comprehensions : Plus rapides que les boucles for+append
- functools.lru_cache : Mise en cache des résultats
- NumPy vectorization : Opérations vectorisées
Interopérabilité
- C API : Python C API — PyObject, PyArg_ParseTuple
- ctypes : Appel de fonctions C (FFI)
- CFFI : Interface C plus moderne
- Cython : extern from, déclarations C directes
- pybind11 : C++ vers Python
- PyO3 : Rust vers Python (via maturin)
- nanobind : Bindings C++ légers
Applications Industrielles
- Google : YouTube, infrastructure
- Instagram : Serveur web Django, asyncio massif
- Spotify : Backend, analyse de données
- Netflix : Pipeline de données, ML
- NASA : Simulations, analyse de données
- CERN : Analyse de données de physique
- JPMorgan : PySpark, analyse financière
- Uber : ML, réservation
Sécurité
- Subprocess security : Éviter shell=True
- Pickle insecurity : Ne pas désérialiser des pickles non fiables
- AST security : ast.literal_eval pour expressions sûres
- Cryptography : hashlib, secrets, PyCryptodome
- Dependency auditing : pip-audit, safety, bandit
- Typing security : mypy / pyright
Veille Technologique
- PEPs : python.org/dev/peps
- discuss.python.org : Forum de discussion officiel
- GitHub : python/cpython, python/peps
- YouTube : PyCon, EuroPython
- PEP 703 (no-GIL) : Évolution majeure en cours