Python >> Tutoriel Python >  >> Python

Nouvelles du monde Python :mises à jour importantes, modifications essentielles des versions 3.7, 3.8 et 3.9

Nous aimons nous tenir au courant de ce qui se passe dans l'écosystème Python. Aujourd'hui, nous allons partager avec vous certaines des actualités Python les plus importantes de ces derniers mois.

Les nouvelles versions de la sémantique Python fournissent de nombreux raccourcis, et les connaître ne peut qu'améliorer votre code. Au fur et à mesure que le langage évolue, il peut faire plus et offrir de meilleures performances. Plus tôt vous apprenez à mettre à jour votre code pour tirer parti des améliorations technologiques de Python, mieux c'est pour vous et votre équipe.

Dans cet article, nous analyserons les modifications essentielles et les nouvelles fonctionnalités fournies avec Python 3.7, 3.8 et 3.9.

Avant d'aborder le sujet, nous allons également jeter un coup d'œil très rapide sur les changements dans l'écosystème Python, car il y a eu plusieurs développements qui affectent l'ensemble de la communauté Python.

Nous avons inclus un bref récapitulatif des bases de Python dans la première partie de cet article. Si vous n'en avez pas besoin, vous pouvez aller directement à "Actualités clés de l'écosystème Python".

Récapitulatif rapide :principes de base de Python

1. Qu'est-ce que Python ?

Python est un langage de programmation orienté objet qui a été développé en 1991 par Guido van Rossum.

Les principes directeurs de Python sont encapsulés dans le Zen de Python. Vous pouvez, en fait, les appeler avec la commande "importer ceci", qui est un petit œuf de Pâques. Il est inclus dans Python depuis le PEP 20 - Le Zen de Python. Il contient 19 proverbes, et c'est essentiellement une liste de principes d'écriture de logiciels qui ont influencé les modèles de conception de Python.

L'ensemble contient des déclarations générales, par exemple "complexe vaut mieux que compliqué" et "les cas particuliers ne sont pas assez spéciaux pour enfreindre les règles". Mais il existe également plusieurs affirmations très spécifiques, telles que "Il ne devrait y avoir qu'une seule manière évidente de le faire.

Bien que cela puisse ne pas être évident au début, sauf si vous êtes néerlandais".

Que sont les PEP ?

Les PEP sont des propositions d'amélioration de Python. Il existe trois types de PEP :

  • Norme
    Proposer des modifications à la bibliothèque de code Python.
  • Informationnel
    Pour informer la communauté Python et regrouper les informations importantes.
  • Processus
    Pour suggérer de grands changements dans l'écosystème Python, par ex. comment les décisions sont prises, le chemin de développement, etc.

Les PEP doivent être co-écrits par l'un des principaux développeurs de Python. Si vous souhaitez soumettre un PEP mais que vous ne travaillez pas avec un développeur de base Python, vous devez faire en sorte que l'un d'eux devienne votre "sponsor". Leur rôle est essentiellement de vous guider tout au long du processus complexe d'examen du PEP.

Le Conseil de pilotage, un groupe restreint de créateurs et d'experts Python de haut niveau, a l'autorité finale pour décider quels PEP sont approuvés. Vous trouverez plus d'informations sur les PEP dans le PEP 1.

Une chose qui pourrait vous dérouter lorsque vous lisez le PEP 1 est que le public principal des PEP est "les principaux développeurs de l'interpréteur de référence CPython et leur conseil de direction élu, ainsi que les développeurs d'autres implémentations de la spécification du langage Python ». CPython ?

2. Qu'est-ce que CPython ?

C'est déroutant parce que quand vous pensez Python, vous ne pensez pas CPython . Mais il s'avère qu'il n'y a pas de Python sans CPython. Du moins si vous ne considérez pas les autres implémentations Python.

Les langages de programmation ne font pas qu'« exister », ils doivent d'une manière ou d'une autre être interprétés par la machine. L'interpréteur principal pour Python, celui que Guido van Rossum a créé en utilisant le langage de programmation C, est l'implémentation CPython.

D'autres implémentations incluent Jython (en Java) et PyPy (en RPython, qui est un sous-ensemble de Python). Mais CPython est l'implémentation d'origine fournie avec le package de téléchargement Python sur Python.org.

3. Qui est Guido van Rossum ?

Un programmeur professionnel des Pays-Bas qui avait beaucoup contribué à l'industrie avant même de créer Python. Ses réalisations précédentes incluent la contribution d'une routine glob() à BSD Unix et le co-développement du langage de programmation ABC.

Python a été publié pour la première fois en février 1991, deux ans après que Guido a commencé à travailler dessus en tant que projet parallèle. En 2019, un an après avoir renoncé au titre de Python’s Benevolent Dictator For Life (BDFL), van Rossum a pris sa retraite de sa carrière pleine de réalisations exceptionnelles en matière de programmation.

4. Python :l'origine du nom

La légende raconte que Guido van Rossum était d'humeur humoristique, et en tant que fan de comédie anglaise, il a emprunté le nom de Monty Python.

Actualités clés de l'écosystème Python

1. Versions Python

L'un des plus grands changements dans le verset Python a été l'annonce tant attendue de la disparition de Python 2, et la date limite après laquelle aucune nouvelle mise à jour (y compris les mises à jour de sécurité) ne sera ajoutée par l'équipe de développement Python principale. La publication des nouvelles mises à jour pour la version 2 s'est terminée le 1er janvier 2020. Pour plus de détails, voir PEP-0373.

Cela signifie que les développeurs Python doivent migrer vers l'une des versions de Python 3 (comme la 3.8 stable), du moins ceux qui s'appuient sur les mises à jour de l'équipe de développement officielle de Python.

L'équipe Python maintient à la fois Python 2 et Python 3 simultanément depuis 2006, mais cette année marque la fin de cette ère. Il a été repoussé jusqu'en 2015, lorsque le support officiel de Python 2 était censé se terminer.

Python 3 n'est pas compatible avec Python 2, et il était en fait plus lent que Python 2 lors de sa première sortie. Ces complications ont empêché beaucoup de gens de migrer en 2008, et beaucoup d'entre eux ne l'ont pas fait même en 2015. Désormais, s'ils veulent bénéficier du support officiel du langage, ils n'ont d'autre choix que de migrer vers Python. 3.

2. Le BDFL de Python se retire

Après des années à essayer de convaincre les développeurs de passer à Python 3, tout en maintenant deux versions de Python pour satisfaire tout le monde, l'équipe de développement de Python en a assez.

Et avouons-le, à ce stade, cela devenait un peu idiot. La date à laquelle le support de Python devait s'arrêter avait déjà été repoussée. Initialement, il était prévu pour 2015.

L'autre grande histoire, qui a éclaté il y a un an mais n'est peut-être pas largement connue, est que le créateur de Python, Guido van Rossum, a démissionné en tant que dictateur bienveillant de Python pour la vie.

En ce moment, le Conseil de pilotage doit se passer de Guido pour la première fois en 30 ans. Mais, comme il l'a dit dans son annonce, il y a beaucoup d'excellents candidats pour prendre sa place.

Merci pour tout, Guido !

Nouveautés de Python :versions 3.7, 3.8 et 3.9

1. Python 3.7 :nouvelles fonctionnalités et modifications essentielles

a) PEP 553—Point d'arrêt intégré()

Le breakpoint() La fonction peut être utilisée pour déboguer une application en cours d'exécution ou un script. Il entre dans un débogueur au point où il est placé.

Jusqu'à la version 3.7, le débogueur Python standard était pdb :

Depuis la version 3.7, vous pouvez utiliser le point d'arrêt() à la place :

C'est pour qui ? Le fait est que vous pouvez déjà le définir automatiquement dans votre IDE. Donc, si vous utilisez, par exemple, PyCharm, cela ne sera pas révolutionnaire pour vous.

Cependant, le principal avantage est qu'avec breakpoint() , l'équipe de développement Python a pu remédier à plusieurs inconvénients de pdb, l'ancien débogueur. La nouvelle fonction est simplement meilleure et simplifie beaucoup les choses.

b) PEP 564—Ajouter de nouvelles fonctions temporelles avec une résolution en nanosecondes

Pour comprendre l'impact de cette amélioration, nous devons nous pencher sur le problème des nanosecondes en Python.

Le time.time() de Python repose sur un nombre à virgule flottante binaire 64 bits pour la précision. Mais cela a un sérieux inconvénient. Après 104 jours, le type "flottant" commence à perdre des nanosecondes.

Regardez l'exemple du PEP. La conversion de int nanosecondes en float secondes, puis de retour en int nanosecondes, est un bon moyen de visualiser ce problème :

Pour aider à résoudre les problèmes qui pourraient en découler, six nouvelles fonctions ont été ajoutées :

  • time.clock_gettime_ns(clock_id)
  • time.clock_settime_ns(clock_id, time: int)
  • time.monotonic_ns()
  • time.perf_counter_ns()
  • time.process_time_ns()
  • time.time_ns()

Les différentes fonctions permettent une plus grande précision pour les développeurs. Ils renvoient un nombre de nanosecondes au format Python int. Avec ces alternatives, les développeurs peuvent éviter d'utiliser la fonction problématique time.time().

c) PEP 557—Classes de données

Ce PEP a introduit une nouvelle classe pour les données, qui peut être appliquée en utilisant le @dataclass décorateur, de sorte que le développeur n'a pas besoin de changer quoi que ce soit, à moins qu'il ne s'agisse d'un cas où une logique spéciale est requise.

@dataclass est une sorte de wrapper qui contient d'autres fonctions ou classes. Voici un exemple :

Le @dataclass décorateur crée pour nous des fonctions spéciales "dunder" (double-under-double-wonder), qui sont :

  • __init__ - constructor
  • __repr__ - string object representation
  • __eq__ - object comparison method using the == operator
  • __ne__- object comparison method using the != operator
  •  __lt__- object comparison method using the < operator
  • __le__- object comparison method using the <= operator
  • __gt__- object comparison method using the > operator
  • __ge__- object comparison method using the >= operator

La partie intéressante est que @dataclasses compare les champs par lui-même, il n'a besoin de rien de plus.

d) importlib.resources

3.7 a entraîné l'introduction de la bibliothèque importlib.resources. Il est utilisé comme un moyen simple d'ouvrir des packages et d'en lire les données. Cela simplifie l'extraction de données à partir de fichiers non-Python.

Regardez cet exemple de 3.6 :

Utilisation de PKG_RESOURCES :

Et maintenant, Python 3.7 et importlib :

Si vous utilisez Python 3.6 ou une version antérieure, vous pouvez rechercher la bibliothèque importlib_resources, qui sert de backport de cette fonction.

e) PEP 563—Évaluation reportée des annotations

Cela introduit un _annotations_ spécial module. Plus important encore, le module est utilisé pour contenir des représentations sous forme de chaîne d'annotations de fonctions et de variables. Au lieu de les évaluer lors de la définition de la fonction, elles deviennent des chaînes stockées dans _annotations_ .

Jetez un œil à une fonction similaire de la 3.6 :

Dans 3.7, ce n'est plus une représentation sous forme de chaîne, mais un nom de classe qui est évalué dans les annotations :

À partir de la version 3.7, la première ligne (from __future__ import annotations ) est requis. Si vous ne l'ajoutez pas en haut de votre fichier, le compilateur déclenchera une exception NameError, comme si la fonctionnalité n'existait pas.

Selon le PEP, cette annotation sera par défaut en 4.0. Pourquoi devriez-vous en avoir besoin ?

Un bon exemple consiste à utiliser un vérificateur de style pour vérifier les données de sortie de la fonction/variable avec les données de l'annotation. Vous pouvez utiliser MyPy pour une analyse de code statique comme celle-ci. De plus, cette fonctionnalité a été conçue avec ses précurseurs à l'esprit (c'est-à-dire PEP484 et PEP0526), ​​et elle permet à ces exécutions de frappe d'être jusqu'à sept fois plus rapides qu'auparavant.

f) PEP 567—Variables de contexte

Il s'agit d'un nouveau mécanisme de gestion des variables de contexte. Le PEP explique cela comme un élément supplémentaire qui simplifie la gestion des variables en programmation asynchrone (par exemple, lorsque vous utilisez asyncio).

Deux nouvelles classes ont été introduites :

  • contextvars.Context
  • contextvars.ContextVar

Utiliser .Context , vous pouvez extraire différentes données d'une même variable de contexte, ce qui est suffisant pour les données échangées dans les jobs asynchrones.

Pour utiliser des variables de contexte, le PEP propose de déclarer un objet de ContextVar , qui sert en quelque sorte de clé à vos données stockées dans ce contexte particulier. Ensuite, vous pouvez utiliser "get" pour recevoir la valeur actuelle et "set" pour modifier la valeur de la variable.

Voici un exemple simple qui montre comment utiliser contextVar diffère de l'utilisation d'une variable normale :

Et pour un exemple complexe de Context.run , jetez un oeil à ceci :

Tout d'abord, comme dans cet exemple simple, nous créons une variable de contexte.

Ensuite, nous définissons la fonction principale, dans laquelle nous modifions la variable de contexte à l'aide de "set".

Ensuite, nous copions le contexte au-delà de la portée de la fonction principale qui n'a pas encore été appelée. Toute copie de contexte dans l'environnement asyncio se traduit par des données légèrement différentes, appelées "référence faible".

Nous exécutons la fonction principale en contexte. Comme vous pouvez le voir, il accepte de nouveaux paramètres, qui sont échangés en run.

Ce n'est pas la seule chose intrigante à propos de Context, et si vous souhaitez en savoir plus, analysez le PEP.

2. Python 3.8 :nouvelles fonctionnalités et modifications essentielles

a) F-Strings :expressions auto-documentées (débogage)

Cela vous permet d'imprimer la valeur d'une variable. Il a été introduit dans la version 3.6 et permettait l'impression et la mise en forme du texte (au lieu de .format ). Dans 3.8, les chaînes F ont été enrichies d'une option de débogage.

Comme vous pouvez le voir, il y a aussi le ‘name’ to ‘name=’ monnaie. Il permet l'impression de débogage de la variable, car il imprime la valeur et le nom de la variable.

b) PEP 572—Expressions d'affectation :=(le tristement célèbre morse)

C'est le plus controversé de tous les changements de Python 3.8. Il a introduit une nouvelle notation pour attribuer une valeur, et c'est := .

Il a été surnommé "le morse" parce que le symbole ressemble un peu aux crocs et aux yeux de l'animal. Cette nouvelle notation permet d'attribuer une valeur tout en créant une expression différente, par ex. liste-compréhension.

Le morse était en fait l'une des principales raisons pour lesquelles Guido van Rossum a démissionné du rôle de BDFL de Python (si vous ne savez pas ce que signifie BDFL, consultez la section Quick Recap—Python Basics de cet article).

Vous pouvez déclarer une variable dans l'instruction "if". Vous n'avez pas besoin de le déclarer avant la fonction.

c) PEP 570—Paramètres positionnels Python uniquement

En Python, il existe des paramètres de position et des paramètres de mot-clé. Cela crée de la confusion.

Pour vous aider à éviter cette confusion, ce PEP introduit une nouvelle syntaxe. Il ajoute une barre oblique "/", qui peut être utilisée pour définir les paramètres comme positionnels uniquement.

3. Python 3.9 :nouvelles fonctionnalités et modifications essentielles

La version 3.9 est toujours en version alpha et est uniquement destinée aux tests. Cela signifie que vous ne devriez pas l'utiliser pour votre base de code de production. Il y a beaucoup de petits changements, et il n'y a pas encore de nouvelles fonctionnalités, juste des optimisations et des corrections de bogues. L'optimisation suivante est la plus importante :

a) Module d'analyseur obsolète remplacé par le module ast

Le parser module a été utilisé pour extraire des données de fichiers Python, essentiellement pour analyser Python avec Python. Il est maintenant obsolète et l'équipe de développement Python recommande de ne pas utiliser parser , qui sera supprimé dans les versions plus récentes. Il est maintenant conseillé d'utiliser ast .

Ast a repris parser à l'époque de la version 3.2, mais son rôle augmente maintenant. Merci à ast , nous pouvons analyser le code Python dans le code Python et extraire des informations telles que le nombre de fois que vous avez importé un certain module.

Exemple :

b) Multiligne ast.dump()

Le ast.dump La fonction a reçu un nouveau paramètre :"indent". Il est livré avec la possibilité d'ajouter plusieurs lignes lors du déplacement du contenu du code Python analysé dans la console.

Exemple :

Lors de l'analyse de cette fonctionnalité, je suis tombé sur un package appelé ASTPRETTY, qui permet également plusieurs lignes. Il fait la même chose que ast.dump, sans l'indentation et la tabulation.

La nomenclature est légèrement différente ici :

c) Exécuter la version alpha de Python 3.9

Il existe trois manières principales de démarrer l'alpha :

  • Utiliser Docker

Docker est une suite de virtualisation et de conteneurisation, où vous pouvez exécuter votre application en dehors de vos bibliothèques système. Pour démarrer Python 3.9, vous devez obtenir Docker :

docker pull python :3.9.0a4

Puis lancez-le :

docker run -it python:3.9.0a4 /bin/python

  • Utilisation de PyENV

Tout d'abord, installez PyENV conformément aux instructions sur GitHub.

Ensuite, vous pourrez installer 3.9 via PyENV avec :

pyenv install 3.9-dev

Mais ce n'est pas tout. Vous devez ajouter le plugin pour pouvoir créer un environnement virtuel :

clone git https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv

Ensuite, vous créez virtualenv :

pyenv virtualenv 3.9-dev venv3.9

Et enfin, activez virtualenv :

pyenv active venv3.9

  • Utilisation du PPA Ubuntu/Debian

La dernière option est le PPA Ubuntu.

Vous pouvez installer Python 3.9 en utilisant apt-get et add-apt-repository :

sudo apt-get install -y software-properties-common

sudo add-apt-repository ppa:deadsnakes/nightly

sudo apt mettre à jour &&sudo apt installer python3.9

Réflexions finales

Python évolue tout le temps, et la communauté des développeurs Python a été confrontée à plusieurs changements importants ces derniers temps.

Les choses seront-elles différentes maintenant que le créateur d'origine s'est retiré de son rôle d'arbitre tout-puissant de tout ce qui concerne Python ?

Python a toujours été un projet fortement axé sur la communauté, et il continuera probablement dans cet esprit. Hormis la démission de Guido van Rossum, aucun changement n'a été apporté au processus de mise en œuvre des modifications de la technologie et de l'écosystème.

Ayant dit "au revoir" à Python 2, il est possible que le développement de nouvelles versions de Python aille plus vite. Mais ce ne sont que des spéculations, nous devrons attendre et voir par nous-mêmes.

En attendant, si vous souhaitez plus d'analyses de qualité, nous avons une vaste collection d'autres articles sur Python sur notre blog. Nous avons pensé que vous pourriez trouver ceux-ci particulièrement intéressants :

  • Guide de migration de Python 2.7 vers 3.X :comment effectuer le portage de Python 2 vers Python 3
  • Cinq raisons pour lesquelles vous devriez migrer de Python 2 vers Python 3
  • Les meilleurs IDE et éditeurs de code Python (selon nos développeurs et la communauté Python)
  • Comment apprendre Python :meilleurs sites et cours, du débutant au professionnel

Enfin, si vous avez des questions, n'hésitez pas à nous contacter ! Nous aimerions recevoir de vos nouvelles.