Détails
Python possède-t-il un opérateur conditionnel ternaire ?
Si Python n'a pas d'opérateur conditionnel ternaire, est-il possible d'en simuler un en utilisant d'autres constructions du langage ?
5549
3
Oui, elle a été [ajoutée][1] dans la version 2.5. La syntaxe de l'expression est la suivante :
D'abord,
condition
est évaluée, puis exactement l'un dea
oub
est évalué et retourné en fonction de la valeur [booléenne][4] decondition
. Sicondition
vautVrai
, alorsa
est évalué et retourné maisb
est ignoré, ou sinon quandb
est évalué et retourné maisa
est ignoré.Cela permet le court-circuitage car lorsque
condition
est vrai, seula
est évalué etb
n'est pas évalué du tout, mais lorsquecondition
est faux, seulb
est évalué eta
n'est pas évalué du tout.Par exemple :
Notez que les conditionnelles sont une expression, pas un état. Cela signifie que vous ne pouvez pas utiliser d'instructions d'affectation ou de
pass
ou d'autres états dans une expression conditionnelle :Vous pouvez cependant utiliser des expressions conditionnelles pour assigner une variable comme ceci :
Pensez à l'expression conditionnelle comme à une commutation entre deux valeurs. Elle est très utile lorsque vous êtes dans une situation de "une valeur ou une autre", mais elle ne fait pas grand-chose d'autre.
Si vous avez besoin d'utiliser des instructions, vous devez utiliser un
if
normal état au lieu d'une expression conditionnelle.Gardez à l'esprit que cette méthode est désapprouvée par certains Pythonistes pour plusieurs raisons :
condition ? a : b
de nombreux autres langages (tels que C, C++, Go, Perl, Ruby, Java, Javascript, etc.), ce qui peut conduire à des bogues lorsque des personnes non familières avec le comportement "surprenant" de Python l'utilisent (elles peuvent inverser l'ordre des arguments).if
" puisse être réellement utile, et rendre votre script plus concis, il complique vraiment votre code).Si vous avez du mal à vous souvenir de l'ordre, rappelez-vous que lorsque vous lisez à haute voix, vous dites (presque) ce que vous voulez dire. Par exemple,
x = 4 si b > 8 sinon 9
est lu à haute voix commex sera 4 si b est supérieur à 8 sinon 9
.Documentation officielle :
[Expressions conditionnelles] [2]
[Existe-t-il un équivalent de l'opérateur ternaire "? :" du C ?][3]
[1] : https://mail.python.org/pipermail/python-dev/2005-September/056846.html "[Python-Dev] Résolution d'une expression conditionnelle" [2] : https://docs.python.org/3/reference/expressions.html#conditional-expressions "Expressions conditionnelles [3] : https://docs.python.org/3.3/faq/programming.html#is-there-an-equivalent-of-c-s-ternary-operator "Existe-t-il un équivalent de l'opérateur ternaire "? :" en C ?" [4] : https://en.wikipedia.org/wiki/Boolean_data_type "Type de données booléen".
Pour les versions antérieures à la 2.5, il y a une astuce :
Il peut donner des résultats erronés lorsque
on_true
a une valeur booléenne fausse.1 Bien qu'il ait l'avantage d'évaluer les expressions de gauche à droite, ce qui est plus clair à mon avis.[1] : http://docs.python.org/3.3/faq/programming.html#is-there-an-equivalent-of-c-s-ternary-operator
Extrait de [la documentation] :
Nouveau depuis la version 2.5.
[La documentation] : https://docs.python.org/3/reference/expressions.html#conditional-expressions "Expressions conditionnelles". [PEP 308] : https://www.python.org/dev/peps/pep-0308/ "PEP 308 -- Expressions conditionnelles".