Se rendre au contenu

Python 3.10 est sorti

4 octobre 2021 par
Python 3.10 est sorti
Makersquad

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.

Django 3.2 LTS est sorti