Python 3.8

Python 3.8.0 (final) a été publié le 14 octobre 2019. Les fonctionnalités de la version 3.8 sont définies dans le PEP 569 et une description détaillée des modifications est disponible dans Nouveautés de Python 3.8.

Fonctionnalités

État

PEP 570

Arguments positionnels uniquement

PEP 572

Expressions d’affectation

Terminé

PEP 574

Protocole pickle 5 avec données hors-bande

PEP 578

Hooks d’audit à l’exécution

PEP 587

Configuration de l’initialisation de Python

PEP 590

Vectorcall : un protocole d’appel rapide pour CPython

Divers

Les f-strings prennent en charge = pour les expressions auto-documentées et le débogage

Terminé

Autres modifications du langage :

Une instruction continue était interdite dans la clause finally en raison d’un problème d’implémentation. Dans Python 3.8, cette restriction a été levée

Terminé

Les types bool, int et fractions.Fraction disposent désormais d’une méthode as_integer_ratio() comme celle présente dans float et decimal.Decimal

Les constructeurs de int, float et complex utiliseront désormais la méthode spéciale __index__(), si elle est disponible et que la méthode correspondante __int__(), __float__() ou __complex__() ne l’est pas

Ajout de la prise en charge des échappements N{name} dans les expressions régulières

Les dictionnaires et les vues de dictionnaires sont désormais itérables dans l’ordre d’insertion inverse à l’aide de reversed()

La syntaxe autorisée pour les noms d’arguments nommés dans les appels de fonction a été davantage restreinte. En particulier, f((keyword)=arg) n’est plus autorisé

Le dépaquetage généralisé d’itérables dans les instructions yield et return ne nécessite plus de parenthèses englobantes

Lorsqu’une virgule manque dans du code tel que [(10, 20) (30, 40)], le compilateur affiche un SyntaxWarning accompagné d’une suggestion utile

Les opérations arithmétiques entre des sous-classes de datetime.date ou datetime.datetime et des objets datetime.timedelta renvoient désormais une instance de la sous-classe, plutôt que de la classe de base

Lorsque l’interpréteur Python est interrompu par Ctrl-C (SIGINT) et que l’exception KeyboardInterrupt résultante n’est pas interceptée, le processus Python se termine désormais via un signal SIGINT ou avec le code de sortie approprié, de sorte que le processus appelant puisse détecter qu’il est mort à cause d’un Ctrl-C

Certains styles de programmation avancés nécessitent de mettre à jour l’objet types.CodeType d’une fonction existante

Pour les entiers, la forme à trois arguments de la fonction pow() autorise désormais un exposant négatif dans le cas où la base est première avec le modulo

Les compréhensions de dictionnaires ont été harmonisées avec les littéraux de dictionnaires, de sorte que la clé est calculée en premier et la valeur en second

La méthode object.__reduce__() peut désormais renvoyer un tuple comportant de deux à six éléments

Modifications des modules intégrés :

asyncio

asyncio.run() est passée de l’API provisoire à l’API stable

Terminé

L’exécution de python -m asyncio lance un REPL nativement asynchrone

L’exception asyncio.CancelledError hérite désormais de BaseException plutôt que de Exception et n’hérite plus de concurrent.futures.CancelledError

Terminé

Ajout de asyncio.Task.get_coro() pour obtenir la coroutine encapsulée au sein d’une asyncio.Task

Les tâches asyncio peuvent désormais être nommées, soit en passant l’argument nommé name à asyncio.create_task() ou à la méthode create_task() de la boucle d’événements, soit en appelant la méthode set_name() sur l’objet tâche

Ajout de la prise en charge de Happy Eyeballs dans asyncio.loop.create_connection(). Pour spécifier le comportement, deux nouveaux paramètres ont été ajoutés : happy_eyeballs_delay et interleave.

gc

get_objects() peut désormais recevoir un paramètre generation optionnel indiquant la génération dont récupérer les objets. (Notez toutefois que, bien que gc soit intégré, get_objects() n’est pas implémentée pour MicroPython)

math

Ajout de la nouvelle fonction math.dist() pour calculer la distance euclidienne entre deux points

Extension de la fonction math.hypot() pour gérer plusieurs dimensions

Ajout de la nouvelle fonction math.prod(), analogue à sum(), qui renvoie le produit d’une valeur de départ « start » (par défaut : 1) par un itérable de nombres

Ajout de deux nouvelles fonctions combinatoires math.perm() et math.comb()

Ajout d’une nouvelle fonction math.isqrt() pour calculer des racines carrées entières exactes sans conversion en virgule flottante

La fonction math.factorial() n’accepte plus d’arguments qui ne sont pas de type entier

Terminé

sys

Ajout d’une nouvelle fonction sys.unraisablehook() qui peut être surchargée pour contrôler la gestion des « exceptions non levables »