Возможный дубликат: троичный оператор 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
.
Я спрашиваю об общем синтаксисе.
Это более точно выражение троичный оператор, а не if-then, вот синтаксис на языке python
value_when_true if condition else value_when_false
Лучший пример: (спасибо Мистер Бернс)
'Yes' if fruit == 'Apple' else 'No'
Теперь с присваиванием и противопоставлением синтаксису if.
fruit = 'Apple'
isApple = True if fruit == 'Apple' else False
vs
fruit = 'Apple'
isApple = False
if fruit == 'Apple' : isApple = True
Кроме того, вы можете использовать и"обычные" в случае
синтаксис и объединить его в одну строку с двоеточием.
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))
count = 0 if count == N else N+1
- троичный оператор. Хотя я бы сказал, что ваше решение более читабельно, чем это.
Общий троичный синтаксис:
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]()