Python одна строка if-else с разными операторами

Я возился с одной строкой операторов if и for в python и столкнулся со следующей проблемой:

Я могу сделать что-то вроде следующей работы:

state = 1 if state == 4 else 2

Но я хочу использовать = и += в одном контексте, что-то вроде этого:

state = 1 if state == 4 else state+=1

Как я могу реализовать это в одной строке?

5 ответов

Решение

+= это не оператор, это утверждение. Вы не можете использовать выражения в выражении.

поскольку state это целое число, просто используйте +, который является оператором:

state = 1 if state == 4 else state + 1

Конечный результат точно такой же, как при использовании += на месте сложения.

Еще лучше, используйте % оператор модуля:

state = (state % 4) + 1

который достигает того, чего вы хотели достичь в первую очередь; предел state до значения между 1 а также 4,

Это невозможно, потому что присваивание не является выражением в Python.

Только выражения имеют значение в Python, которое отличается от JavaScript, например, где значение имеет почти все, включая присваивания.

Вы можете написать свою программу так:

state = 1 if state == 4 else state + 1

Это делает значение обусловленным состоянием, а не присвоением. Это работает в вашем случае, так как переменной состояния всегда присваивается новое значение.

В общем случае, скажем, вы хотите обновить различные переменные в зависимости от текущего состояния, вы должны придерживаться обычного if заявление. Не злоупотребляйте троичным оператором (x if C else y) - используйте его, только если он делает ваш код более читабельным.

Используя лямбду:

state = (lambda n:[n+1,0][n==4] )(state)

Итак, по существу:

[n+1,0][1] # True (1): означает получить индекс #1, который равен 0
[n+1,0][0] # False (0): означает получить индекс #0, который равен n+1

Чтобы сделать его более читабельным, я разделю его на функцию:

def myfunc(n):
    ans = [ n+1, 0 ]
    if n==4:
        return ans[1] # which is the value 0
    else:
        return ans[0] # which is n+1

state=6
state=myfunc(state) # returns 7
state=4
state=myfunc(state) # returns 0

Вы уже присваиваете результат state так что вы можете просто:

state = 1 if state == 4 else state + 1

Просто альтернативный способ сделать это: var = test и "when true" или "когда false"

state = state == 4 and 1 or state + 1

Ответ модуля лучше для этого, но выше это полезный ярлык

Другие вопросы по тегам