Помещение простого оператора if-then-else в одну строку

Возможный дубликат:
Троичный оператор Python

Я только вхожу в Python, и мне действительно нравится краткость синтаксиса. Однако, есть ли более простой способ написать оператор if - then - else чтобы он помещался в одну строку?

Например:

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

Есть ли более простой способ написать это? Я имею в виду, что в Objective-C я бы написал это так:

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

Есть ли что-то подобное для Python?

Обновить

Я знаю, что в этом случае я могу использовать count == (count + 1) % N

Я спрашиваю об общем синтаксисе.

Ответ 1

Это более точно выражение trernary operator, чем if-then, здесь синтаксис python

value_when_true if condition else value_when_false

Лучший пример: (спасибо Mr. Burns)

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

Теперь с назначением и контрастом с синтаксисом

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

против

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

Ответ 2

Более того, вы все равно можете использовать "обычный" синтаксис if и сопоставить его в одну строку с двоеточием.

if i > 3: print("We are done.")

или же

field_plural = None
if field_plural is not None: print("insert into testtable(plural) '{0}'".format(field_plural)) 

Ответ 3

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

- тернарный оператор. Хотя я бы сказал, что ваше решение более читаемо, чем это.

Ответ 4

Общий тройной синтаксис:

value_true if <test> else value_false

Другой способ:

[value_false, value_true][<test>]

например:

count = [0,N+1][count==N]

Это оценивает обе ветки до ее выбора. Чтобы оценить только выбранную ветвь:

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

например:.

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

Ответ 5

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

с вашим фрагментом кода это станет,

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