496 votes

Yat-il un équivalent de Python de l’opérateur c# fusion null ?

En c#, il y a un opérateur de fusion null (orthographié `` ) qui permet au contrôle null (court) facile au cours de l’affectation :

Y a-t-il un python équivalent ?

Je sais que je peux faire :

Mais est-il un moyen encore plus court (où je ne dois pas répéter `` ) ?

659voto

Juliano Points 13802
other = s or "some default value"

Ok, il convient de préciser comment l' or opérateur fonctionne. C'est un opérateur booléen, de sorte qu'il fonctionne dans un contexte booléen. Si les valeurs ne sont pas boolean, ils sont convertis en booléen pour l'application de l'opérateur.

Notez que l' or opérateur ne renvoie pas seulement True ou False, au lieu de cela, elle renvoie le premier opérande qui n'a pas la valeur false.

Dans ce cas, l'expression x or y retours x si il est True ou évalue à true lors de la conversion en booléen. Sinon, elle renvoie y. Pour la plupart des cas, ce sera pour le même but de C♯'null-coalescence de l'opérateur, mais gardez à l'esprit:

42    or "something"    # returns 42
0     or "something"    # returns "something"
None  or "something"    # returns "something"
False or "something"    # returns "something"
""    or "something"    # returns "something"

Si vous utilisez votre variable s pour tenir quelque chose qui est soit une référence à l'instance d'une classe ou d' None (tant que votre classe ne définit pas les membres de l' __nonzero__() et __len__()), il est sûr à utiliser la même sémantique que le null-coalescence de l'opérateur.

En fait, il peut même être utile d'avoir ce côté-effet de Python. Puisque vous savez quelles sont les valeurs que prend la valeur false, vous pouvez l'utiliser pour déclencher la valeur par défaut sans l'aide d' None (un objet d'erreur, par exemple).

147voto

Hugh Bothwell Points 22635

strictement,

sinon s = False deviendra « default value », qui ne peut être que ce qui était voulu.

Si vous voulez faire cela plus courte, essayez

63voto

mortehu Points 121

Voici une fonction qui renvoie le premier argument qui n’est pas None :

Reduce() pourrait inutilement itérer sur tous les arguments même si le premier argument n’est pas rien, vous pouvez donc utiliser cette version :

2voto

Orca Points 11

En plus de la réponse de Juliano sur le comportement de « ou » : c’est « rapide »

Si parfois qu'il a peut être un raccourci utile pour des choses comme

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