IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Python 3.9, la prochaine version du langage Python : construction des types génériques dans les collections standard,
Et un analyseur PEG pour CPython

Le , par Bill Fassinou

89PARTAGES

13  0 
Python 3.8 a été publié en octobre dernier et les travaux sur la version 3.9 du langage ont déjà commencé. Python 3.9 est prévue pour arriver en octobre 2020, mais des aperçus sont déjà disponibles et permettent d’avoir une idée brève des fonctionnalités et des améliorations qui pourraient être introduites dans cette version. La dernière version alpha, la 3.9.0a6, a été publiée vers la fin du mois d’avril et apporte des fonctionnalités qui, pour la plupart, rendront le code Python plus propre. Voici certaines des choses auxquelles l’on peut s’attendre dans Python 3.9.

Avant d’aller plus loin dans le sujet, il est important de noter que les versions mineures précédentes de Python 3 contenaient encore quelques fonctions pour la rétrocompatibilité avec Python 2.7. Mais depuis l'arrêt officiel du support de Python 2.7 et à partir de Python 3.9, de nombreuses fonctions seront supprimées ou seront marquées comme obsolètes. Il s’agit d’une information à prendre en compte lorsque vous souhaiteriez passer de la version 2.7 à la version 3.9. Les différences notables entre Python 3.8 et les versions alpha de Python 3.9 publiées sont :

Construire des types génériques dans les collections standard

Si vous avez travaillé avec les langages Java ou C#, vous connaissez la notion de types génériques. Ce sont généralement des collections qui peuvent être paramétrées avec le type qu'elles contiennent. Par exemple, en C#, vous pouvez définir une liste comme celle-ci : var exampleList = new List<string>(). Ce qui signifie que vous créez une liste de chaînes de caractères.

Maintenant, Python introduit ce genre de fonctionnalité dans le module de saisie. Fondamentalement, les outils ainsi que les vérificateurs de type et les linters sont modifiés pour reconnaître les collections standard comme des types génériques. Cela signifie que vous n'avez pas besoin d'importer les types en majuscules correspondants (par exemple, List) à la saisie. En bref, cette fonctionnalité supprime la nécessité d'une hiérarchie de types parallèle dans le module de saisie et facilite les annotations du programme.

Analyseur PEG

Cette nouvelle fonctionnalité n'affecte pas autant les développeurs. Cela pourrait être intéressant pour les ingénieurs qui s'intéressent aux compilateurs. Jusqu'à présent, Python utilisait un analyseur basé sur LL(1) et toute la grammaire Python était en quelque sorte construite autour de cet analyseur. L'analyseur LL(1) est un analyseur descendant qui analyse l'entrée de gauche à droite.

Tout d'abord, il effectue une dérivation de la phrase vers la gauche, avec un seul jeton de regard. Il crée ainsi un tableau qui contient des transitions codées entre tous les états possibles de l'analyseur, le tableau d'analyse. En raison de la nature de Python et des limitations de LL(1), certains hacks ont été introduits dans le langage. C'est pour cela qu’un nouvel analyseur basé sur le PEG (Parsing Expression Grammar) est utilisé dans Python 3.9. La différence entre la grammaire PEG et LL(1) est que la grammaire PEG reflète la manière dont l'analyseur fonctionnera lors de l'analyse.

Ordre topologique

Si vous travaillez avec des graphiques, alors vous allez trouver cette fonctionnalité intéressante et utile. Une nouvelle classe TopologicalSorter est ajoutée au module functools. Cette classe effectue l'ordonnancement topologique du graphique. Pour faire quelque chose comme cela avec les versions précédentes de Python, vous devriez l'implémenter vous-même en vous servant des algorithmes comme une recherche en profondeur ou l'algorithme de Khan. Un autre avantage de cette fonctionnalité est qu'elle permet le tri parallèle des nœuds, même s'ils sont ajoutés un par un.

Dans ce cas, vous créez TopologicalSorter avec un graphe initial optionnel et vous ajoutez ensuite des nœuds supplémentaires au graphe. Vous utiliserez les méthodes prepare, is_active et get_ready pour traiter chaque nœud, puis vous utiliserez la méthode done pour indiquer que le nœud est ajouté et que le graphe est trié.

Nouvelles méthodes de calcul et d'analyse des chaînes de caractères

Des modules tels que les chaînes de caractères et les mathématiques sont également étendus avec quelques fonctions utiles en Python 3.9. Le module string a deux nouvelles méthodes : removeprefix et removesuffix. Celles-ci permettent de supprimer facilement un préfixe ou un suffixe inutile d'une chaîne de caractères. Les modules bytes, bytearray, et collections.UserString sont étendus avec les mêmes méthodes. D’autres méthodes comme math.gdc et math.ldc, pour calculer respectivement le plus grand diviseur commun et le plus petit multiple commun, sont maintenant étendues de sorte qu'elles reçoivent plus de deux paramètres.

En outre, de nouvelles méthodes ont été ajoutées au module mathématique :

  • nextafter(a, b) qui retourne le prochain nombre flottant après a allant vers b ;
  • ulp(a) qui retourne la valeur du bit le moins significatif d'un flottant. ULP signifie “Unit in the Last Place” et est utilisé comme mesure de précision dans les calculs numériques ;
  • etc.

Il ne s’agit là que de quelques fonctionnalités prévues pour être livrées avec Python 3.9. Certaines de ces fonctionnalités se traduisent par un code plus propre et plus compréhensible, tandis que d'autres pourraient recadrer l’état d'esprit sur la grammaire Python. Vous pouvez vous référer à la documentation officielle pour en savoir plus sur ces diverses fonctionnalités et voir ce que la nouvelle version apporte d'autre.

Sources : Python 3.9.0a5, Python 3.9.0a6

Et vous ?

Que pensez-vous des nouveautés prévues pour Python 3.9 ?
Quelles autres fonctionnalités souhaiteriez-vous avoir dans Python 3.9 ?

Voir aussi

Python 3.8.0 est publié avec la prise en charge des expressions d'affectation (l'opérateur de morse « := ») et les paramètres de position uniquement

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

Une première version alpha de Python 3.8 est publiée. Voici un tour d'horizon des nouveautés de cette version

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de transgohan
Expert éminent https://www.developpez.com
Le 06/10/2020 à 15:40
Python obtient maintenant 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. Ces chemins restent désormais valides après la modification du répertoire courant par os.chdir().
Merci mille fois !
J'en ai l'utilité dans un projet et je dois systématiquement enregistrer la valeur de __file__ dans une variable avant d'exécuter une action qui pourrait avoir le malheur de faire un chdir...
Cela me paraît tellement aberrant de faire ainsi...
1  0 
Avatar de Pyramidev
Expert éminent https://www.developpez.com
Le 12/05/2020 à 1:15
En Python, j'utilise le typage statique. Du coup, je fais souvent des imports du module typing.
Avec PEP 585 qui permet de remplacer, par exemple, Dict[str, List[int]] par dict[str, list[int]], certains imports de typing ne seront plus nécessaires et d'autres pourront être remplacés par des imports d'autres modules (surtout collections.abc). Pourquoi pas.

Et puis je lis :
The deprecated functionality will be removed from the typing module in the first Python version released 5 years after the release of Python 3.9.0.
Et BAM, dans ma tronche. Le changement ne sera pas facultatif. Il y aura du code à migrer obligatoirement avant une version ultérieure.
0  0 
Avatar de Fagus
Membre expert https://www.developpez.com
Le 07/10/2020 à 11:03
{** d1, ** d2} : peu de gens seraient capables de deviner ce que cela signifie la première fois qu'ils le voient,
Étrange choix en effet, on dirait une sorte de liste de pointeurs de pointeurs.
0  0