Одна строка, если-условие-назначение
у меня есть следующий код
num1 = 10
someBoolValue = True
мне нужно установить значение num1 до 20 если someBoolValue и True; и не делайте ничего другого. Итак, вот мой код
num1 = 20 if someBoolValue else num1
есть ли способ, которым я мог бы избежать ...else num1 часть, чтобы она выглядела чище? Эквивалент
if someBoolValue:
num1 = 20
Я попытался заменить его с ...else pass такой: num1=20 if someBoolValue else pass. Все, что я получил, это синтаксическая ошибка. И я не мог просто опустить ...else num1 часть.
спасибо
9 ответов:
Я не думаю, что это возможно в Python, так как то, что вы на самом деле пытаетесь сделать, вероятно, расширяется до чего-то вроде этого:
num1 = 20 if someBoolValue else num1если исключить
else num1, вы получите синтаксическую ошибку, так как я уверен, что уступки должны что-то вернуть.как уже упоминали другие, вы могли бы сделать это, но это плохо, потому что вы, вероятно, просто запутаетесь при чтении этого фрагмента кода в следующий раз время:
if someBoolValue: num1=20Я не большой фанат
num1 = someBoolValue and 20 or num1по той же самой причине. Я должен дважды подумать о том, что делает эта линия.лучший способ достичь того, что вы хотите сделать, это оригинальная версия:
if someBoolValue: num1 = 20причина, по которой это лучшая версия, заключается в том, что очень очевидно, что вы хотите сделать, и вы не будете путать себя или кого-то еще, кто позже вступит в контакт с этим кодом.
также, как Примечание стороны,
num1 = 20 if someBoolValueявляется допустимым кодом Ruby, потому что Ruby работает немного по-другому.
в одну строку:
if someBoolValue: num1 = 20но не делайте этого. Этот стиль обычно не ожидается. Люди предпочитают более длинную форму для ясности и последовательности.
if someBoolValue: num1 = 20(в равной степени следует избегать верблюжьих шапок. Так что скорее используйте
some_bool_value.)обратите внимание, что в строке выражение
some_value if predicateбезelseчасть не существует, потому что не было бы возвращаемого значения, если бы предикат был false. Однако выражения должны иметь четко определенные возвращаемое значение во всех случаях. Это отличается от использования, например, Ruby или Perl.
нет. Я думаю, вы надеялись, что что-то вроде
num1 = 20 if someBoolValueбудет работать, но это не так. Я думаю, лучший способ-это с помощью тегаifзаявление, как вы писали это:if someBoolValue: num1 = 20
num1 = 10 + 10*(someBoolValue == True)это мой новый окончательный ответ. Предыдущий ответ был следующим и был излишним для заявленной проблемы. Getting_too_clever ==
not Good. Вот предварительный ответ... еще хорошо, если вы хотите добавить одну вещьTruecond и еще один дляFalse:num1 = 10 + (0,10)[someBoolValue == True]Вы упомянули
num1уже будет иметь значение, которое следует оставить в покое. Я предположил, чтоnum1 = 10так как это первое заявление поста, так что операция, чтобы добраться до20добавить10.num1 = 10 someBoolValue = True num1 = 10 + (0,10)[someBoolValue == True] print(f'num1 = {num1}\nsomeBoolValue = {someBoolValue}')произвел этот выход
num1 = 20 someBoolValue = True
вот что я могу предложить. Используйте другую переменную, чтобы получить предложение if и назначить его num1.
код:
num2 =20 if someBoolValue else num1 num1=num2
Comments