Python 3.12

Par:
fredericmazue

lun, 02/10/2023 - 15:56

Le projet Python a annoncé la disponibilité de Python 3.12, ce 2 octobre 2023. Une version qui contient à la fois des modifications apportées au langage et à la bibliothèque standard. Les modifications de la bibliothèque se concentrent sur le nettoyage des API obsolètes, la convivialité et l'exactitude. Il convient de noter que le package distutils a été supprimé de la bibliothèque standard. La prise en charge du système de fichiers dans os et pathlib reçoit un certain nombre d'améliorations et plusieurs modules ont de meilleures performances.

Syntaxe des paramètres de type

Au niveau du langage, l'amélioration la plus notable est l'implémentation de PEP 695 et concerne la syntaxe des paramètres de type.

Ainsi PEP 695 introduit une nouvelle manière plus compacte et explicite de créer et des fonctions génériques :

def max[T](args: Iterable[T]) -> T:
    ...

class list[T]:
    def __getitem__(self, index: int, /) -> T:
        ...

    def append(self, element: T) -> None:
        ...

De plus, le PEP introduit une nouvelle façon de déclarer les alias de type à l'aide de l' instruction type, qui crée une instance de TypeAliasType:

type Point = tuple[float, float]

Les alias de type peuvent également être génériques :

type Point[T] = tuple[T, T]

La nouvelle syntaxe permet de déclarer des paramètres TypeVarTuple et ParamSpec, ainsi que  des paramètres TypeVar avec des limites ou des contraintes :

type IntFunc[**P] = Callable[P, int]  # ParamSpec
type LabeledTuple[*Ts] = tuple[str, *Ts]  # TypeVarTuple
type HashableSequence[T: Hashable] = Sequence[T]  # TypeVar with bound
type IntOrStrSequence[T: (int, str)] = Sequence[T]  # TypeVar with constraints

La valeur des alias de type ainsi que la limite et les contraintes des variables de type créées via cette syntaxe sont évaluées uniquement à la demande (évaluation paresseuse). Cela signifie que les alias de type peuvent faire référence à d'autres types définis ultérieurement dans le fichier.

Les paramètres de type déclarés via une liste de paramètres de type sont visibles dans la portée de la déclaration et dans toutes les portées imbriquées, mais pas dans la portée externe. Par exemple, ils peuvent être utilisés dans les annotations de type pour les méthodes d'une classe générique ou dans le corps de la classe. Cependant, ils ne peuvent pas être utilisés dans la portée du module une fois la classe définie.

Formalisation syntaxique des f-strings 

A remarquer encore, l'implémentation de PEP 701 qui lève certaines restrictions sur l'utilisation des f-strings. Les composants d'expression à l'intérieur des f-strings peuvent désormais être n'importe quelle expression Python valide, y compris des chaînes réutilisant la même citation que la f-string contenante, des expressions multilignes, des commentaires, des barres obliques inverses et des séquences d'échappement Unicode.

Toutes les nouveautés de Python 3.12 sont récapitulées dans ce billet.