Question Mettre une simple instruction if-then-else sur une ligne [dupliquer]


Dupliquer possible:
Opérateur Ternaire Python 

Je viens d'entrer dans Python et j'aime vraiment la finesse de la syntaxe. Cependant, existe-t-il un moyen plus simple d'écrire if-then-else déclaration donc il correspond à une ligne?

Par exemple:

if count == N:
    count = 0
else:
    count = N + 1

Y a-t-il une manière plus simple d'écrire ceci? Je veux dire, en Objective-C, j'écrirais ceci:

count = count == N ? 0 : count + 1;

Y a-t-il quelque chose de similaire pour Python?

Mettre à jour

Je sais que dans ce cas je peux utiliser count == (count + 1) % N.

Je pose des questions sur la syntaxe générale.


529
2018-05-10 12:58


origine


Réponses:


C'est plus spécifiquement un opérateur ternaire expression que si-alors, voici la syntaxe python

value_when_true if condition else value_when_false

Meilleur exemple: (Merci M. Burns)

'Yes' if fruit == 'Apple' else 'No' 

Maintenant avec assignation et contraste avec la syntaxe if

fruit = 'Apple'
isApple = True if fruit == 'Apple' else False

contre

fruit = 'Apple'
isApple = False
if fruit == 'Apple' : isApple = True

1023
2018-05-10 13:00



count = 0 if count == N else N+1

- l'opérateur ternaire. Bien que je dirais que votre solution est plus lisible que cela.


104
2018-05-10 13:00



De plus, vous pouvez toujours utiliser la syntaxe "ordinaire" si et la fusionner en une ligne avec les 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)) 

94
2017-07-07 08:41



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]

Cela évalue les deux branches avant d'en choisir une. Pour évaluer uniquement la branche choisie:

[lambda: value_false, lambda: value_true][<test>]()

par exemple.:

count = [lambda:0, lambda:N+1][count==N]()

78
2018-05-10 13:22



<execute-test-successful-condition> if <test> else <execute-test-fail-condition>

avec votre code-extrait, il deviendrait,

count = 0 if count == N else N + 1

15
2018-05-10 15:23