Le développement de la version 3.8.0 du langage de programmation Python tend vers sa fin et la version stable est prévue pour être livrée en octobre. Python 3.8.0 est la dernière version du langage Python et introduit un nombre important de nouvelles fonctionnalités pour les programmeurs. La première et la deuxième version bêta de Python 3.8.0 ont été publiées respectivement en juin et juillet de cette année. Selon l'équipe, ces deux bêtas sont très proches de la version finale qui sera livrée en octobre. Ainsi, quelles sont les fonctionnalités les plus susceptibles d’être publiées avec la version 3.8.0 de Python ?
La première version bêta de Python 3.8.0, Python 3.8.0b1, a été publiée dans la première semaine du mois de juin, donnant un aperçu des nouvelles fonctionnalités prévues pour langage. La première version bêta de Python 3.8.0 a introduit de nombreuses nouvelles fonctionnalités au langage, notamment les expressions d’affectation, une nouvelle API C pour configurer l’initialisation Python, des paramètres de position, la fusion de typed_ast avec CPython, LOAD_GLOBAL est maintenant 40 % fois plus rapide et pickle utilise maintenant le protocole 4 par défaut pour améliorer encore plus les performances.
La deuxième version bêta de Python 3.8.0 a été publiée au début de ce mois avec des améliorations importantes au niveau de la première version bêta. Après deux versions bêta, l’équipement du développement de Python 3.8.0 s’est dit proche d’une version stade et a donc proposé une liste des fonctionnalités les plus probantes de la version finale qui sera livrée en octobre prochain. Voici listées ci-dessous quelques-unes des fonctionnalités présentées par l’équipe de développement du langage :
L’opérateur de morse « := »
Cet opérateur a été introduit depuis la première version bêta. Introduit par le PEP 572, il s’agit d’une fonctionnalité qui permet d'affecter des variables dans une expression en utilisant la notation « NAME := expr ». Cela permet de rendre le code plus compact et d’éviter des calculs répétés. À cet effet, une nouvelle exception, TargetScopeError, a été ajoutée et un changement a été apporté à l'ordre d'évaluation. Dans la note de version, il est indiqué qu’actuellement, cette fonctionnalité n'est disponible que sous forme d'instruction, ce qui la rend indisponible dans les compréhensions de liste et les autres contextes d'expression.
Dans sa nouvelle présentation, l’équipe de développement de Python 3.8.0 a indiqué que l'utilisation de « := » dans une instruction « if » ou « while » permet d'affecter une valeur à une variable tout en la testant. Il est destiné à simplifier des choses comme les correspondances de modèles multiples. Ces utilisations, ainsi que d’autres (par exemple, dans la compréhension de listes et de dictées) aident à clarifier l’intention du programmeur. C'est une fonctionnalité que beaucoup d'autres langages ont, mais selon l’équipe, Python est bien sûr passé à côté de cela depuis près de 30 ans à ce stade. « En fin de compte, il s’agit en fait d’un changement assez modeste pour tout le tumulte qu’il a causé », ont-ils expliqué. De plus, l’équipe considère l’opérateur de morse comme la principale fonctionnalité de cette version 3.8.0 de Python. Elle rappelle cependant que l’opérateur de morse a également été la fonctionnalité la plus controversée pendant la phase de développement.
Les paramètres de position uniquement
Depuis Python 3.8.0b1, le PEP 570 a introduit une nouvelle syntaxe « / » pour spécifier des paramètres de position uniquement dans les définitions de fonction Python. Les paramètres de position n'ont pas un nom utilisable en externe. Lorsqu'une fonction acceptant des paramètres uniquement positionnels est appelée, les arguments positionnels sont mappés sur ces paramètres uniquement en fonction de leur ordre. Une fonction peut n'accepter que les arguments *args et **kwargs , puis appliquer la condition selon laquelle kwargs est vide, mais cela masque ce que la fonction tente de faire.
Même si la proposition définit une nouvelle syntaxe, les paramètres de position uniquement existent déjà dans les fonctions intégrées dans CPython, comme dans pow(x, y [, z]). La syntaxe proposée dans le PEP 570 étend la précédente et est donc totalement compatible avec les versions antérieures. Les paramètres purement déterminés par la position peuvent être au début d'une liste de paramètres et suivie d'un « / » pour le marquage. Ensuite, vous pouvez d’abord suivre les paramètres spécifiques à la position ou aux mots clés, et après la division * à la fin, les paramètres spécifiques aux mots clés.
Les paramètres de position uniquement permettent de définir des scénarios où, par exemple, une fonction accepte n'importe quel argument de mot clé, mais peut également accepter une ou plusieurs positions. C'est souvent le cas avec les fonctions intégrées de Python. Par conséquent, le fait de permettre aux développeurs Python de le faire eux-mêmes renforce la cohérence du langage. Le « / » indique la fin des paramètres de position uniquement dans une liste d'arguments. L'idée est comparable à l'opérateur « * » pouvant être utilisé dans une liste d'arguments pour délimiter des arguments contenant uniquement des mots clés.
La prise en charge du débogage pour les chaînes de caractères
Les chaînes de caractères f (ou chaînes formatées) ajoutées à Python 3.6 se sont révélées très utiles, mais les pythonistes ont souvent constaté qu’ils les utilisaient de la même manière lors du débogage de la sortie. Eric V. Smith, un contributeur, a donc proposé une syntaxe supplémentaire pour les chaînes de caractères afin de faciliter le débogage des sorties. L'idée originale est venue de Larry Hastings, un développeur principal de Python, et la syntaxe a subi quelques modifications, comme en témoignent deux problèmes de demandes de fonctionnalités sur bugs.python.org. Le résultat final est moins encombrant.
Le format f-string fournit un moyen pratique (et plus performant) d’imprimer du texte et des valeurs calculées ou des variables dans la même expression. Au-delà de cela, certains modificateurs peuvent être utilisés pour changer la sortie. « !s » utilise la représentation str() , plutôt que la valeur par défaut et « !f » sera disponible pour accéder aux contrôles de formatage. Selon l’équipe de développement, une autre caractéristique utile, bien qu’elle soit essentiellement esthétique, est la préservation des espaces dans l’expression de la chaîne de caractères f.
Le résultat de tout cela est que les utilisateurs seront en mesure d'imprimer plus facilement leurs messages de débogage, de journalisation et autres. Cela peut sembler un peu trivial dans le grand schéma, mais il sera certainement très utile. Selon l’équipe de développement de Python 3.8.0, Les f-strings peuvent complètement remplacer d'autres mécanismes d'interpolation de chaînes Python.
L’API C d’initialisation de Python
Cette fonctionnalité a été annoncée avec la publication de Python 3.8.0b1. Le PEP 587 a ajouté une nouvelle API C pour configurer l’initialisation Python, offrant ainsi un contrôle plus précis de l’ensemble de la configuration et un meilleur rapport d’erreurs. Il devient possible de lire la configuration, puis de remplacer certains paramètres calculés avant son application. Il devient également possible de remplacer complètement la façon dont Python calcule les chemins de recherche du module (sys.path). La nouvelle configuration isolée fournit des valeurs par défaut saines pour isoler Python du système. Par exemple, incorporer Python dans une application.
L'utilisation de l'environnement constitue désormais une option d'adhésion plutôt qu'une option de désinscription. Cela signifie que les variables d'environnement, les arguments de ligne de commande et les variables de configuration globale sont ignorés par défaut. Ce PEP a ajouté également les champs tels que « _PyRuntimeState.preconfig » et « PyInterpreterState.config » à ces structures internes. « PyInterpreterState.config » devient la nouvelle configuration de référence, remplaçant les variables de configuration globales et d'autres variables privées.
D’autres fonctionnalités seront également disponibles
Selon l’équipe, Python 3.8 ajoutera une convention d'appel plus rapide pour les extensions C basée sur la convention « fastcall » existante, utilisée en interne par CPython. Il est exposé de manière expérimentale (c'est-à-dire aux noms précédés de traits de soulignement) pour Python 3.8, mais devrait être finalisé et entièrement publié avec la version 3.9 qui devrait être disponible en juin 2020. De plus, la gestion de la configuration dans l'interpréteur a également été nettoyée afin que le langage puisse être plus facilement intégrable dans d'autres programmes sans que des variables d'environnement et d'autres mécanismes de configuration interfèrent avec le système Python installé.
Il existe également de nouvelles fonctionnalités dans divers modules de bibliothèque standard. Par exemple, le module « ast » pour le traitement des arbres de syntaxe abstraite Python a de nouvelles fonctionnalités, comme les statistiques et les frappes. Le projet de document « Quoi de neuf dans Python 3.8.0 ? », fourni sous forme de documentation, contient beaucoup plus d'informations sur ces modifications et bien d'autres. Il contient l’ensemble des nouvelles fonctionnalités et des améliorations attendues pour la version finale de Python 3.8.0.
Sources : LWN, Python 3.8.0
Et vous ?
Quel est votre avis sur les nouveautés prévues pour la version finale de Python 3.8.0 ?
Voir aussi
Python 3.8.0 : la première version bêta est publiée avec une API C pour améliorer la configuration de l'initialisation
Python en 2018, les chiffres clés de la communauté. EDI, frameworks, utilisation, SGBD, ORM, tests...
Une première version alpha de Python 3.8 est publiée. Voici un tour d'horizon des nouveautés de cette version
Python 3.8.0 : un aperçu des fonctionnalités attendues pour la version stable du langage de programmation
Prévue pour octobre prochain
Python 3.8.0 : un aperçu des fonctionnalités attendues pour la version stable du langage de programmation
Prévue pour octobre prochain
Le , par Bill Fassinou
Une erreur dans cette actualité ? Signalez-nous-la !