Avec la sortie de la version définitive de Python 3.8.0 en octobre 2019 (les nouveautés), Python vient de se doter d’un nouvel opérateur communément appelé opérateur morse (Walrus operator). Cet opérateur peut avoir des avantages mais comporte aussi quelques risques.
Attention tout le code se trouvant dans cet article ne fonctionne que sous Python 3.8. Si vous utilisez Anaconda et que vous voulez tester le code de cet article, vous pouvez utilisez ces commandes dans votre terminal pour créer et activer un environnement adapté :
> conda create -n py38 python=3.8
> activate py38
> conda install numpy
Qu’est-ce que l’opérateur morse ?
L’opérateur que l’on nomme opérateur morse est un opérateur noté :=
et permettant de simultanément faire une allocation et un test dans la même expression. Il est associé à ce nom du fait de sa ressemblance avec l’animal (les yeux et les défenses).
Il permet de transformer un code comme celui-ci :
import numpy as np
# on crée une matrice de nombres aléatoires
data = np.random.random(1000).reshape(100,10)
n_col = data.shape[1]
if n_col > 10 :
print("Nombre de colonnes : {}".format(n_col))
elif n_col == 10 :
print("On a bien 10 colonnes")
En celui-ci :
import numpy as np
# on crée une matrice de nombres aléatoires
data = np.random.random(1000).reshape(100,10)
if (n_col := data.shape[1]) > 10 :
print("Nombre de colonnes : {}".format(n_col))
elif n_col == 10 :
print("On a bien 10 colonnes")
On a ainsi économisé en ajoutant l’opération d’allocation à l’intérieur de la condition. Cette nouvelle approche peut être intéressante mais il faut garder à l’esprit que Python se veut un langage simple et l’ajout d’un opérateur qui complexifierait votre code doit se faire avec précautions.
Quand est-ce que c’est intéressant ?
Dans le code précédent, l’intérêt n’est pas certain. On peut imaginer d’autres applications.
Dans une list comprehension :
liste_init = ["Python","PEP","conda"]
liste_filtree = [x.upper() for x in liste_init if "P" in x.upper()]
Par :
liste_init = ["Python","PEP","conda"]
liste_filtree = [y for x in liste_init if "P" in (y:=x.upper())]
Dans une boucle while
, on utilise ici python pour lire les lignes d’un fichier texte :
fichier_python = open("python.txt")
# on fait une boucle sur les lignes jusqu'à
# trouver le mot python
line = fichier_python.readline()
while line:
if "python" in line:
print("On a trouvé python")
break
line = fichier_python.readline()
Avec l’opérateur morse, on peut l’écrire :
fichier_python = open("python.txt")
# on fait une boucle sur les lignes jusqu'à
# trouver le mot python
while line := fichier_python.readline():
if "python" in line:
print("On a trouvé python")
break
On gagne encore quelques lignes de code et des allocations non nécessaires.
Attention aux parenthèses
En effet, l’utilisation des parenthèses est très importante, dans la condition du début de cet article, si vous placez mal ou oubliez les parenthèses, le résultat est alors différent. Illustration :
if (n_col := data.shape[1]) > 10 :
print("Nombre de colonnes : {}".format(n_col))
# dans ce cas n_col est un entier associé à la seconde
# dimension de notre matrice data
if n_col := data.shape[1] > 10 :
print("Nombre de colonnes : {}".format(n_col))
# dans ce cas n_col est un booléen qui vaut True si la
# condition >10 est remplie et False dans le cas contraire
En savoir plus
Vous voulez en savoir plus, je vous conseille ce talk au sujet de l’opérateur morse :=
:
Et vous qu’en pensez-vous ?
N’hésitez pas à partager vos impressions sur ce nouvel opérateur dans les commentaires.
Nos formations Python pour monter en compétence et découvrir le langage Python pour la data
Partager cet article
Comments 3
Bonsoir!! Je suis tres satisfaire par cet article . J’ai in petit soucis avec python 3.8.
1) comment enregistrer mes code Dans un fichier
2) comment debuter avec la console.
Merci deja
Si vous avez des tuto sur python 3,8 faire moi savoir svp
Bonjour,
Si vous voulez enregistrer vos fichiers, il suffit d’avoir un éditeur de texte ou un IDE (Spyder, VScode, PyCharm…) et d’enregistrer le fichier au format .py
Pour lancer la console, il vous suffit d’aller dans un terminal et de taper : python
Cordialeement,
Emmanuel