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.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

Le , par Bill Fassinou

350PARTAGES

18  0 
L’équipe de développement de Python a publié la version 3.8.0 du langage de programmation ce lundi. Après une version bêta publiée cet été, l’équipe a annoncé hier la disponibilité de la version stable de Python 3.8.0 avec de nouvelles fonctionnalités. Python 3.8.0 prend en charge les expressions d’affection, les paramètres de position uniquement, une API C pour l’initialisation de Python qui offre un meilleur contrôle de l’ensemble de la configuration et un meilleur rapport d’erreurs. Python 3.8.0 apporte également plusieurs améliorations au langage.

La version stable de Python 3.8.0 est finalement prête et vous pouvez maintenant commencer à essayer les dernières nouveautés du langage et par la même occasion bénéficier des dernières améliorations. Voici listées ci-dessous quelques-unes des fonctionnalités qu’apporte la version stable de Python 3.8.0 :

Les expressions d’affectation (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 ». La nouvelle syntaxe « := » est dénommé « opérateur de morse ». Elle assigne des valeurs aux variables dans le cadre d'une expression plus large. Cela permet de rendre le code plus compact et d’éviter des calculs répétés. De plus, une nouvelle exception, TargetScopeError, a été ajoutée et un changement a été apporté à l'ordre d'évaluation.

En juillet, 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

Le PEP 570 a introduit une nouvelle syntaxe, « / », dans Python 3.8.0b1 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.

Les hooks d’audit d’exécution

Le PEP 578 a ajouté un crochet d'audit (Audit Hook) et un crochet ouvert vérifié (Verified Open Hook). Les deux sont disponibles à partir du code natif, ce qui permet aux applications et frameworks écrits en code Python pur de bénéficier de notifications supplémentaires, tout en permettant également aux administrateurs intégrés ou aux administrateurs système de déployer des versions de Python où l'audit est toujours activé. D’après l’explication donnée dans la documentation de cette version, seul CPython est tenu de fournir les API natives telles que décrites ici.

Les autres implémentations doivent fournir les API Python pures et peuvent fournir des versions natives en fonction des exécutions sous-jacentes. Les événements d'audit sont également considérés comme spécifiques à l'implémentation, mais sont liés par des garanties de compatibilité des fonctionnalités normales.

L’API C d’initialisation de Python

Cette fonctionnalité a été publiée pour la première fois dans Python 3.8.0b par le PEP 587. En effet, ce PEP a apporté 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.

Vectorcall : un protocole d'appel rapide pour CPython

Le PEP 590 ajoute au langage Python une nouvelle API C qui permet d’optimiser les appels d’objets. Il introduit un nouveau protocole « vectorcall » et une convention d'appel. Ceci est basé sur la convention « fastcall », qui est déjà utilisée en interne par CPython. Les nouvelles fonctionnalités peuvent être utilisées par n'importe quelle classe d'extension définie par l'utilisateur. La plupart des nouvelles API sont privées dans CPython 3.8.0. Le plan est de finaliser la sémantique et de la rendre publique dans Python 3.9.0.

Protocole Pickle 5 avec tampons de données hors bande

Lorsque pickle est utilisé pour transférer des données volumineuses entre des processus Python afin de tirer parti d'un traitement multicoeurs ou multimachines, il est important d'optimiser le transfert en réduisant les copies mémoire, et éventuellement en appliquant des techniques personnalisées telles que la compression en fonction des données. pickle 5 prend en charge les tampons hors bande où les données compatibles PEP 3118 peuvent être transmises séparément du flux de pickle principal, à la discrétion de la couche de communication.

Cache de système de fichiers parallèle pour les fichiers bytecode compilés

Python 3.8.0 prend en charge désormais un nouveau paramètre, PYTHONPYCACHEPREFIX (également disponible sous -X pycache_prefix), qui configure le cache de bytecode implicite pour utiliser une arborescence de système de fichiers parallèle séparée, plutôt que les sous-répertoires __pycache__ par défaut dans chaque répertoire source. L'emplacement du cache est indiqué dans sys.pycache_prefix.

Il y a aussi de nombreuses autres fonctionnalités et améliorations à noter dans cette version 3.8.0 de Python. 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 encore. Il contient l’ensemble des nouvelles fonctionnalités et des améliorations contenues dans la version stable de Python 3.8.0.

Source : Note de publication Python 3.8.0

Et vous ?

Qu'en pensez-vous ?

Voir aussi

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 : 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 wiztricks
Expert éminent sénior https://www.developpez.com
Le 16/10/2019 à 8:12
Salut,

Citation Envoyé par transgohan Voir le message
Je n'ai jamais rencontré ce genre de chose.
A quoi cela sert-il ? J'ai un peu de mal à le rédiger et comprendre l'intérêt.
Dans Python, les nouvelles fonctionnalités font l'objet de discussions sur l'intérêt de la chose et d'une synthèse qui prend la forme d'un PEP (Python Enhancement Proposal) où sont repris des exemples qui en montrent avantages/inconvénients: ici, il s'agit du PEP 572.

- W
4  0 
Avatar de Pyramidev
Expert éminent https://www.developpez.com
Le 15/10/2019 à 20:02
Personnellement, à part les paramètres uniquement positionnels et les expressions d’affectation, les ajouts qui m'intéressent le plus en Python 3.8 sont les améliorations du typage statique, notamment :
  • typing.Protocol (PEP 544) pour faire du sous-typage structurel,
  • typing.final et typing.Final (PEP 591) pour les classes non dérivables, les méthodes non surchargeables et les variables qu'on ne peut plus réaffecter et
  • typing.Literal (PEP 586) pour définir une forme simplifiée de type dépendant (dependent type).
2  0 
Avatar de champomy62
Membre averti https://www.developpez.com
Le 15/10/2019 à 20:48
Autant passer à un langage statique! Aucun n'interet que de vouloir tout typer si en plus python ne s'en sert même pas pour accélerer le code! En plus il faudra maintenir cette documentation.
1  0 
Avatar de transgohan
Expert éminent https://www.developpez.com
Le 16/10/2019 à 7:46
En juillet, 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.
Je n'ai jamais rencontré ce genre de chose.
A quoi cela sert-il ? J'ai un peu de mal à le rédiger et comprendre l'intérêt.

J'imagine ceci qui n'a aucun intérêt :
Code : Sélectionner tout
SI( (maVar = 30) == VRAI)
A moins que ce ne soit un if qui affecte 30 si la variable ne le vaut pas, et ne fait que le test si elle le vaut bien, dans l'optique de gagner du temps d'exécution ?
Auquel cas quel est l'intérêt du if...

Quelqu'un pour m'éclairer ?
1  0 
Avatar de transgohan
Expert éminent https://www.developpez.com
Le 16/10/2019 à 10:54
Merci wiztricks.

Code python : Sélectionner tout
1
2
3
match = pattern.search(data) 
if match is not None : 
    # Do something with match
Code python : Sélectionner tout
1
2
if (match := pattern.search(data)) is not None: 
    # Do something with match
Ok...
On dit souvent que les informaticiens sont des fainéants mais là on atteint un certain niveau.

Bon après en en lisant d'autres il y a quelques intérêts.
Mais j'ai jamais été trop fan des écritures python raccourcies à l'extrême car cela devient vite compliqué à comprendre lors de la lecture.
1  0 
Avatar de Baalouga
Nouveau membre du Club https://www.developpez.com
Le 16/10/2019 à 9:16
Je n'ai jamais rencontré ce genre de chose.
A quoi cela sert-il ? J'ai un peu de mal à le rédiger et comprendre l'intérêt.
Par exemple au lieu de stocker le retour d'une fonction puis tester avec un if ou une boucle tu directement appeler cette fonction et affecter le retour à une variable dans la condition du if ou while.
0  0 
Avatar de hotcryx
Membre extrêmement actif https://www.developpez.com
Le 17/10/2019 à 15:40
à force de tout simplifier, le python va redevenir du perl (( YES ))
0  0 
Avatar de jcezanna56
Membre à l'essai https://www.developpez.com
Le 02/12/2019 à 15:56
à force de tout simplifier, le python va redevenir du perl
Y"a encore du boulot ....
0  0