Date de sortie : 2 octobre 2023
Documentation officielle : What’s New in Python 3.12
Python 3.12 simplifie drastiquement le typage. Fini TypeVar('T'), place à def foo[T](). Les f-strings deviennent aussi beaucoup plus flexibles. Et les performances continuent de s’améliorer — les compréhensions sont 2× plus rapides.
Les nouveautés principales
Nouvelle syntaxe pour les génériques — enfin lisible
Déclaration simplifiée des types génériques :
# Avant
from typing import TypeVar, Generic
T = TypeVar('T')
class Box(Generic[T]):
def __init__(self, item: T) -> None:
self.item = item
# Après
class Box[T]:
def __init__(self, item: T) -> None:
self.item = item
Pour les fonctions :
def first[T](items: list[T]) -> T:
return items[0]
Instruction type pour les alias
type Point = tuple[float, float] type Vector[T] = list[T]
F-strings libérés
Les restrictions artificielles sautent :
# Réutilisation des quotes
f"Items: {", ".join(items)}"
# Multi-ligne avec commentaires
f"""Result: {
compute_value() # calcul complexe
}"""
# Backslashes autorisés
f"Path: {'\\n'.join(paths)}"
# Imbrication arbitraire
f"{f"{f"{value}"}"}"
Décorateur @override
Indiquer explicitement qu’une méthode surcharge une méthode parente :
from typing import override
class Child(Parent):
@override
def process(self) -> None:
... # Erreur si Parent n'a pas de méthode process
TypedDict pour **kwargs
Typer les keyword arguments :
from typing import TypedDict, Unpack
class Options(TypedDict):
timeout: int
retries: int
def fetch(url: str, **kwargs: Unpack[Options]) -> str:
...
Performance
- Compréhensions 2x plus rapides (inlining)
- asyncio 75% plus rapide
- isinstance() contre Protocols 2-20x plus rapide
- tokenize 64% plus rapide
itertools.batched() — grouper par lots
from itertools import batched
list(batched("ABCDEFG", 3))
# [('A', 'B', 'C'), ('D', 'E', 'F'), ('G',)]
pathlib.Path.walk()
Enfin un walk() dans pathlib :
from pathlib import Path
for root, dirs, files in Path(".").walk():
for file in files:
print(root / file)
Suppression de distutils
distutils est supprimé. Utilisez setuptools ou des alternatives modernes comme hatch, flit, pdm.
Autres améliorations
- math.sumprod() — somme de produits
- sqlite3 avec CLI et meilleur contrôle des transactions
- GIL par sous-interpréteur (API C uniquement)
- sys.monitoring pour debuggers/profilers low-overhead
Échanger avec un expert Python
Nous revenons vers vous sous 24h.
Chez Makersquad, nous mettons notre expertise Python au service de projets ambitieux et durables. Que ce soit pour le développement d’applications web, la conception d’API, l’automatisation de processus, la data ou l’optimisation de performances, nous accompagnons nos clients à chaque étape. Si vous avez un besoin en Python, un nouveau projet, une refonte, un audit: notre équipe est prête à vous aider à concevoir des solutions robustes, évolutives et maintenables.
À retenir
Python 3.12 modernise sérieusement le système de types. La nouvelle syntaxe class Foo[T] et type Point = ... rendent le code générique enfin agréable à lire. C’est aussi la release qui prépare le terrain pour le GIL optionnel (3.13).