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 |
|
Arguments positionnels uniquement |
||
Expressions d’affectation |
Terminé |
|
Protocole pickle 5 avec données hors-bande |
||
Hooks d’audit à l’exécution |
||
Configuration de l’initialisation de Python |
||
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.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. |
|
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) |
|
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é |
Ajout d’une nouvelle fonction sys.unraisablehook() qui peut être surchargée pour contrôler la gestion des « exceptions non levables » |
|