Nouvelles fonctionnalités de Python 3.8 et il est temps de passer à Python 2

2020 est arrivé, ce qui signifie que Python 2 n'est plus pris en charge . Pour être précis, les principaux développeurs ont déjà cessé de travailler sur la branche, et la sortie de la version 2.7.18, dédiée à PyCon US en avril 2020, marquera l'arrêt complet de toute activité liée à Python 2.


D'un autre côté, la récente version de Python 3.8 a eu lieu, ajoutant un peu de sucre syntaxique au langage. Python 3.9, cependant, n'est pas encore attendu prochainement , et pourtant il ne semble rien ajouter d'intéressant au langage.


Donc, si vous n'avez soudainement pas abandonné Python 2, il n'y a tout simplement pas de raison de tirer: la prise en charge de la deuxième version est déjà arrêtée, et la transition immédiate vers la version 3.8 vous permettra d'utiliser le langage dans son état le plus actuel pendant longtemps.


Eh bien, pour faciliter la décision, ce qui suit est un aperçu des principales innovations de Python 3.8, qui sera utile à tous les pythonistes.


1. Expressions d'affectation


Également connu sous le nom d'opérateur morse, une nouvelle syntaxe qui vous permet d'affecter des valeurs à des variables dans une autre expression. C'est probablement la plus célèbre et la plus discutée des innovations de la version 3.8.


a = 6 #    b  a ** 2 #  ,  b > 0 if (b := a ** 2) > 0: print(f' {a}  {b}.') #  6  36. 

Le but de l'introduction de l'opérateur est d'augmenter la lisibilité du code, donc son utilisation (comme tous les autres opérateurs) n'est pas nécessaire à la première occasion, mais uniquement lorsque cela est approprié.


 #     a = 5 d = [b := a+1, a := b-1, a := a*2] 

2. Seuls les arguments positionnels


Les fonctions peuvent prendre deux types d'arguments.


  • Positionnel - transmis par position
  • Nommé - transmis par son nom

Dans le code ci-dessous, les valeurs des deux arguments a et b peuvent être passées à la fois par position et par nom.


 def my_func(a, b=1): return a+b my_func(5,2) #    my_func(a=5, b=2) #    

Dans la nouvelle version de Python, vous pouvez explicitement limiter les paramètres qui ne peuvent être que positionnels ou uniquement nommés en utilisant les caractères / et * dans la signature de fonction (ce dernier, cependant, est apparu avant Python 3.8).


Dans l'exemple ci-dessous, les deux premiers paramètres a et b sont uniquement positionnels, c et d peuvent être quelconques et les deux derniers e et f doivent être nommés.


 def my_func(a, b, /, c, d, *, e, f): return a+b+c+d+e+f my_func(1, 2, 3, 4, 5, 6) # : e, f    my_func(a=1, b=2, 3, 4, e=5, f=6) # : a, b    my_func(1, 2, c=3, 4, e=5, f=6) # returns 21 my_unc(1, 2, c=3, d=4, e=5, f=6) # returns 21 

Pourquoi limiter la flexibilité des types d'arguments? Dans certains cas, l'utilisation d'un nom de paramètre au lieu de sa position sera inutile et inappropriée. La restriction évitera également les problèmes si vous envisagez de modifier les noms des arguments de position à l'avenir.


3. f-lines 2.0


Il est difficile de décrire avec des mots combien plus facile et plus élégant le formatage des lignes f faites est apparu dans Python 3.6.


C'est difficile à croire, mais Python 3.8 a réussi à les rendre encore plus pratiques. En ajoutant le signe = après le nom de la variable substituée, vous pouvez afficher son nom et sa valeur sans dupliquer le nom.


 pi = 3 #        print(f'pi={pi}') #     print(f'{pi=}') #      

Le débogage avec impression sera encore plus pratique :)


4. L'ordre inverse des entrées du dictionnaire


Il est désormais possible de parcourir les dictionnaires en sens inverse à l'aide de reverse () .


5. Obtention de métadonnées à partir d'autres modules


Le nouveau module importlib.metadata vous permettra d'obtenir des métadonnées (par exemple, la version) à partir de packages tiers.


6. enfin + continuer


Auparavant, vous ne pouviez pas enfin utiliser l'instruction continue à l'intérieur en raison de la difficulté à implémenter cette fonctionnalité. Maintenant c'est possible.


 for i in range(2): try: print(i) finally: print('.') continue print('    .') # Python <= 3.7 >> SyntaxError: 'continue' not supported inside 'finally' clause # Python 3.8 >> 0 . 1 . 

Source: https://habr.com/ru/post/fr483276/


All Articles