Date de sortie : 4 octobre 2021
Documentation officielle : What’s New in Python 3.10
C’est LA release qu’on attendait. Le pattern matching match/case débarque enfin en Python, et les messages d’erreur deviennent enfin utiles. Ajoutez int | str au lieu de Union[int, str], et vous avez une version majeure qui change vraiment le quotidien.
Les nouveautés principales
Pattern matching — match/case enfin !
Le structural pattern matching arrive enfin en Python :
def http_error(status):
match status:
case 400:
return "Bad request"
case 404:
return "Not found"
case 418:
return "I'm a teapot"
case _:
return "Unknown error"
Avec déstructuration :
match point:
case (0, 0):
print("Origin")
case (x, 0):
print(f"On X axis at {x}")
case (0, y):
print(f"On Y axis at {y}")
case (x, y):
print(f"Point at ({x}, {y})")
Et pattern matching sur les classes :
match event:
case Click(x, y) if x > 100:
print(f"Click on right side at {y}")
case KeyPress(key="q"):
quit()
Union de types avec |
Syntaxe simplifiée pour les unions :
# Avant
from typing import Union
def square(n: Union[int, float]) -> Union[int, float]:
...
# Après
def square(n: int | float) -> int | float:
...
# Fonctionne aussi avec isinstance
isinstance(x, int | str)
Messages d’erreur — Python devient enfin sympa
Python suggère maintenant des corrections quand vous vous trompez :
>>> collections.namedtoplo AttributeError: module 'collections' has no attribute 'namedtoplo'. Did you mean: namedtuple? >>> schwarzschild_radius NameError: name 'schwarzschild_radius' is not defined. Did you mean: 'schwartschild_radius'?
Et pointe précisément les erreurs de syntaxe :
>>> {x,y for x,y in range(10)}
SyntaxError: did you forget parentheses around the comprehension target?
Context managers sur plusieurs lignes
with (
open("input.txt") as input,
open("output.txt", "w") as output,
):
output.write(input.read())
zip() avec strict=True
Vérifier que les itérables ont la même longueur :
names = ["Alice", "Bob"] scores = [95, 87, 92] list(zip(names, scores, strict=True)) # ValueError: zip() argument 2 is longer than argument 1
Autres améliorations
- int.bit_count() — compter les bits à 1
- aiter() et anext() — équivalents async de iter() et next()
- dataclasses supporte slots=True
- itertools.pairwise() — itérer par paires
- statistics.covariance(), correlation(), linear_regression()
É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.10 est une release incontournable. Le pattern matching ouvre de nouvelles possibilités d’écriture, et les messages d’erreur améliorés vont vous faire gagner du temps chaque jour. zip(strict=True) à lui seul évite des bugs subtils.