54 votes

Affectation avec "ou" en python

Est-il considéré comme un mauvais style d'attribuer des valeurs à des variables de ce type ?

x = "foobar" or None
y = some_variable or None

Dans l'exemple ci-dessus, x prend la valeur 'foobar'.

40voto

tback Points 3282

Non, c'est une pratique courante. C'est seulement considéré comme un mauvais style pour les expressions qui sont considérablement plus longues que la vôtre.

31voto

Free Monica Cellio Points 2070

Le principal danger de faire quelque chose comme ça est la possibilité que (dans le deuxième cas) some_variable est False mais pas None (le nombre entier 0 par exemple) et vous ne voulez pas vous retrouver avec y égal à Aucun dans ce cas.

8voto

joaquin Points 22450

Je ne suis pas non plus très à l'aise avec ce type d'expressions. Dans Learning Python 4ed, cela est appelé un "comportement quelque peu inhabituel". Plus loin, Mark Lutz dit :

...il s'avère que c'est un paradigme de codage assez commun en Python : pour Python : pour sélectionner un objet non vide parmi un ensemble de taille fixe dans une expression or. Sous une forme plus simple, cette méthode est également couramment utilisé pour désigner un objet par défaut...

En fait, ils produisent des expressions concises d'une ligne qui contribuent à éliminer le bruit de ligne du code.
Ce comportement est la base d'une forme de l'opérateur ternaire if/else :

A = Y if X else Z

7voto

DonCarleone Points 258

La syntaxe de l'OP est parfaitement bien.
Le nom officiel de l'"affectation avec ou" est le suivant coalescence nulle et il y a maintenant une page Wikipedia à ce sujet ! https://en.wikipedia.org/wiki/Null_coalescing_operator
Cette question peut également être utile : Existe-t-il un équivalent en Python de l'opérateur null-coalescing en C# ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X