Mettre une simple déclaration if-then-else sur une ligne [double]
-
25-09-2019 - |
Question
Possible en double: ternaires
Je suis juste en Python et je vraiment le laconisme de la syntaxe. Cependant, est-il un moyen plus facile d'écrire une déclaration if
-then
-else
il tient sur une ligne?
Par exemple:
if count == N:
count = 0
else:
count = N + 1
Y at-il un moyen plus simple d'écrire cela? Je veux dire, en Objective-C Je voudrais écrire cela comme:
count = count == N ? 0 : count + 1;
Y at-il quelque chose de similaire pour Python?
Mise à jour
Je sais que dans ce cas, je peux utiliser count == (count + 1) % N
.
Je demande au sujet de la syntaxe générale.
La solution
C'est plus spécifiquement un
Meilleur exemple: (merci M. Burns ) Maintenant, avec l'affectation et le contraste avec si la syntaxe vs value_when_true if condition else value_when_false
'Yes' if fruit == 'Apple' else 'No'
fruit = 'Apple'
isApple = True if fruit == 'Apple' else False
fruit = 'Apple'
isApple = False
if fruit == 'Apple' : isApple = True
Autres conseils
De plus, vous pouvez toujours utiliser la syntaxe if
« ordinaire » et amalgamer dans une ligne avec deux points.
if i > 3: print("We are done.")
ou
field_plural = None
if field_plural is not None: print("insert into testtable(plural) '{0}'".format(field_plural))
count = 0 if count == N else N+1
- l'opérateur ternaire. Bien que je dirais que votre solution est plus lisible que cela.
Syntaxe ternaire générale:
value_true if <test> else value_false
Une autre façon peut être:
[value_false, value_true][<test>]
par exemple:
count = [0,N+1][count==N]
évalue les deux branches avant de choisir un. Pour évaluer uniquement la branche choisie:
[lambda: value_false, lambda: value_true][<test>]()
par exemple:.
count = [lambda:0, lambda:N+1][count==N]()
<execute-test-successful-condition> if <test> else <execute-test-fail-condition>
avec votre bout de code, il deviendrait,
count = 0 if count == N else N + 1