J'ai lu les liens ci-dessous, mais cela ne répond pas à ma question.
Python a-t-il un opérateur conditionnel ternaire? (la question est de condenser l'instruction if-else sur une ligne)
Existe-t-il un moyen plus simple d'écrire une instruction if-elif-else pour qu'elle tienne sur une seule ligne?
Par exemple,
if expression1:
statement1
elif expression2:
statement2
else:
statement3
Ou un exemple réel:
if i > 100:
x = 2
elif i < 100:
x = 1
else:
x = 0
Je pense juste que si l'exemple ci-dessus pouvait être écrit de la manière suivante, cela pourrait paraître plus concis.
x=2 if i>100 elif i<100 1 else 0 [WRONG]
la source
a = 1 if i < 100 else (2 if i > 100 else 0)
(Non testé, mais je pense que cela devrait fonctionner)Si vous n'avez besoin que de différentes expressions pour différents cas, cela peut fonctionner pour vous:
Par exemple:
la source
"pos"
n'est pas une déclaration, c'est une expression.Imbriquez simplement une autre clause if dans l'instruction else. Mais cela ne le rend pas plus joli.
la source
Malgré quelques autres réponses: OUI c'est possible :
se traduit par la doublure suivante:
en fait, vous pouvez les imbriquer jusqu'à l'infini. Prendre plaisir ;)
la source
Vous pouvez éventuellement utiliser la
get
méthode d'undict
:Vous n'avez pas besoin de la
get
méthode s'il est garanti que l'une des clés est évaluée comme suitTrue
:Au plus une des clés devrait idéalement être évaluée
True
. Si plus d'une clé est évaluéeTrue
, les résultats peuvent sembler imprévisibles.la source
Il y a une alternative qui est assez illisible à mon avis mais je la partagerai quand même par curiosité:
Plus d'informations ici: https://docs.python.org/3/library/stdtypes.html#boolean-operations-and-or-not
la source
Si vous souhaitez utiliser le code mentionné ci-dessus sur une seule ligne, vous pouvez utiliser ce qui suit:
Ce faisant, x se verra attribuer 2 si i> 100, 1 si i <100 et 0 si i = 100
la source
Cela dépend également de la nature de vos expressions. Le conseil général sur les autres réponses «ne pas le faire» est tout à fait valable pour les déclarations génériques et les expressions génériques.
Mais si tout ce dont vous avez besoin est une table "dispatch", comme appeler une fonction différente selon la valeur d'une option donnée, vous pouvez placer les fonctions à appeler dans un dictionnaire.
Quelque chose comme:
Au lieu d'un if-else:
la source
Les gens ont déjà mentionné les expressions ternaires. Parfois, avec une simple affectation conditionnelle comme exemple, il est possible d'utiliser une expression mathématique pour effectuer l'affectation conditionnelle. Cela peut ne pas rendre votre code très lisible, mais il l'obtient sur une ligne assez courte. Votre exemple pourrait être écrit comme ceci:
Les comparaisons seraient vraies ou fausses, et lors de la multiplication avec des nombres, elles seraient alors 1 ou 0. On pourrait utiliser un + au lieu d'un | au milieu.
la source
L' opérateur ternaire est le meilleur moyen d'obtenir une expression concise. La syntaxe est
variable = value_1 if condition else value_2
. Donc, pour votre exemple, vous devez appliquer l'opérateur ternaire deux fois:la source
Vous pouvez utiliser des instructions if ternaires imbriquées.
la source