Положить простое утверждение о том, чтобы еще и остальное в одной строке [дубликат

StackOverflow https://stackoverflow.com/questions/2802726

Вопрос

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

Я просто попадаю в Python, и мне очень нравится таржевость синтаксиса. Тем не менее, есть ли более легкий способ написать if-then-else Заявление, так что он подходит для одной строки?

Например:

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

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

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

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

Обновлять

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

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

Это было полезно?

Решение

Это более конкретно Темнарный оператор Выражение, чем если бы тогда, вот синтаксис Python

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

Другие советы

Более того, вы все еще можете использовать «обычные» 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)) 
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]()
<execute-test-successful-condition> if <test> else <execute-test-fail-condition>

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

count = 0 if count == N else N + 1
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top