Python 3.9

Python 3.9.0 (final) a été publié le 5 octobre 2020. Les fonctionnalités de la version 3.9 sont définies dans le PEP 596 et une description détaillée des modifications est disponible dans Nouveautés de Python 3.9

Fonctionnalités

État

PEP 573

Accès rapide à l’état du module depuis les méthodes des types d’extension C

Non pertinent

PEP 584

Ajout d’opérateurs d’union aux dictionnaires

Terminé [1]

PEP 585

Annotations de type génériques dans les collections standard

PEP 593

Annotations flexibles de fonctions et de variables

PEP 602

CPython adopte un cycle de publication annuel. Au lieu d’un cycle annuel, viser un cycle de publication de deux mois

Non pertinent

PEP 614

Assouplissement des restrictions grammaticales sur les décorateurs

PEP 615

La base de données des fuseaux horaires de l’IANA est désormais présente dans la bibliothèque standard via le module zoneinfo

PEP 616

Méthodes de chaîne pour supprimer les préfixes et les suffixes

PEP 617

CPython utilise désormais un nouvel analyseur basé sur PEG

Non pertinent

Autres modifications du langage :

__import__() lève désormais ImportError au lieu de ValueError

Terminé

Python obtient désormais le chemin absolu du nom de fichier du script spécifié sur la ligne de commande (ex : python3 script.py) : l’attribut __file__ du module __main__ est devenu un chemin absolu, plutôt qu’un chemin relatif

Par défaut, pour de meilleures performances, l’argument errors n’est vérifié qu’à la première erreur d’encodage/décodage, et l’argument encoding est parfois ignoré pour les chaînes vides

« « .replace(« « , s, n) renvoie désormais s au lieu d’une chaîne vide pour tout n non nul. C’est désormais cohérent avec « « .replace(« « , s)

Toute expression valide peut désormais être utilisée comme décorateur. Auparavant, la grammaire était beaucoup plus restrictive

L’exécution parallèle de aclose() / asend() / athrow() est désormais interdite, et ag_running reflète désormais l’état d’exécution réel du générateur asynchrone

Les erreurs inattendues lors de l’appel de la méthode __iter__ ne sont plus masquées par une TypeError dans l’opérateur in et les fonctions contains(), indexOf() et countOf() du module operator

Les expressions lambda sans parenthèses ne peuvent plus constituer la partie expression d’une clause if dans les compréhensions et les expressions génératrices

Modifications des modules intégrés :

asyncio

En raison de problèmes de sécurité importants, le paramètre reuse_address de asyncio.loop.create_datagram_endpoint() n’est plus pris en charge

Ajout d’une nouvelle coroutine shutdown_default_executor() qui planifie l’arrêt de l’exécuteur par défaut en attendant que le ThreadPoolExecutor termine sa fermeture. De plus, asyncio.run() a été mise à jour pour utiliser la nouvelle coroutine.

Ajout de asyncio.PidfdChildWatcher, une implémentation de surveillance de processus enfants spécifique à Linux qui interroge les descripteurs de fichiers de processus

ajout d’une nouvelle coroutine asyncio.to_thread()

Lors de l’annulation de la tâche en raison d’un délai d’expiration, asyncio.wait_for() attendra désormais que l’annulation soit terminée, y compris dans le cas où le délai est <= 0, comme elle le fait pour les délais positifs

asyncio lève désormais TyperError lors de l’appel de méthodes incompatibles avec un socket ssl.SSLSocket

gc

Le ramasse-miettes ne se bloque plus sur les objets ressuscités

Ajout d’une nouvelle fonction gc.is_finalized() pour vérifier si un objet a été finalisé par le ramasse-miettes

math

Extension de la fonction math.gcd() pour gérer plusieurs arguments. Auparavant, elle ne prenait en charge que deux arguments

Ajout de math.lcm() : renvoie le plus petit commun multiple des arguments spécifiés

Ajout de math.nextafter() : renvoie la valeur en virgule flottante suivant x en direction de y

Ajout de math.ulp() : renvoie la valeur du bit de poids le plus faible d’un flottant

os

Exposition des fonctions os.pidfd_open() et os.P_PIDFD spécifiques à Linux

La fonction os.unsetenv() est désormais également disponible sous Windows

Terminé

Les fonctions os.putenv() et os.unsetenv() sont désormais toujours disponibles

Terminé

Ajout de la fonction os.waitstatus_to_exitcode() : convertit un statut d’attente en code de sortie

random

Ajout d’une nouvelle méthode random.Random.randbytes : génère des octets aléatoires

sys

Ajout d’un nouvel attribut sys.platlibdir : nom du répertoire de bibliothèques spécifique à la plateforme

Auparavant, sys.stderr était mis en mémoire tampon par blocs en mode non interactif. Désormais, stderr est par défaut toujours mis en mémoire tampon par lignes

Notes