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
Ответ модуля лучше для этого, но выше это полезный ярлык