У меня есть следующий код
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
часть.
python
if-statement
bdhar
источник
источник
num1 = 20 if someBoolValue else 10
. Тогда вы также сохранитеnum1=10
строку?num1
уже существует ...Ответы:
Я не думаю, что это возможно в Python, поскольку то, что вы на самом деле пытаетесь сделать, возможно, будет расширено до чего-то вроде этого:
Если вы исключите
else num1
, вы получите синтаксическую ошибку, так как я совершенно уверен, что присвоение должно действительно что-то возвращать.Как уже упоминали другие, вы можете сделать это, но это плохо, потому что вы, вероятно, просто запутаетесь, читая этот фрагмент кода в следующий раз:
Я не большой поклонник
num1 = someBoolValue and 20 or num1
по той же причине. Я должен дважды подумать о том, что делает эта линия.Лучший способ достичь желаемого - это оригинальная версия:
Причина, по которой это лучшее предложение, заключается в том, что совершенно очевидно, что вы хотите сделать, и вы не запутаетесь ни в себе, ни в том, что кто-то еще позже соприкоснется с этим кодом.
Также, как примечание,
num1 = 20 if someBoolValue
действительный код Ruby, потому что Ruby работает немного по-другому.источник
num1 = (20 if someBoolValue else num1)
.Использовать это:
источник
В одну строку:
Но не делай этого. Этот стиль обычно не ожидается. Люди предпочитают более длинную форму для ясности и последовательности.
(В равной степени следует избегать верблюжьих шапок. Поэтому лучше использовать
some_bool_value
.)Обратите внимание, что встроенное выражение
some_value if predicate
безelse
части не существует, потому что не было бы возвращаемого значения, если предикат был ложным. Однако выражения должны иметь четко определенное возвращаемое значение во всех случаях. Это отличается от использования, скажем, в Ruby или Perl.источник
Вы можете использовать один из следующих:
источник
True
/False
, такbool
как является подклассомint
. Во всех случаях, когда тест возвращает что-то, что просто оценило бы значение true, оно завершается с исключением. Второй работает только до тех пор, покаtrueVal
сам не оценивает false, что приведет к тому, что егоfalseVal
назначат, даже если тест был верным.Я думаю, вы надеялись, что что-то подобное
num1 = 20 if someBoolValue
сработает, но это не так. Я думаю, что лучший способ сif
утверждением, как вы написали это:источник
Это мой новый окончательный ответ. Предыдущий ответ был следующим и был излишним для указанной проблемы. Getting_too_clever ==
not Good
. Вот предварительный ответ ... все еще хорошо, если вы хотите добавить одну вещь дляTrue
cond и другую дляFalse
:Вы упомянули,
num1
что уже будет иметь значение, которое следует оставить в покое. Я предположил,num1 = 10
так как это первое утверждение поста, поэтому операция, которую нужно получить,20
это добавить10
.произвел этот вывод
источник
источник
Если вы хотите вызвать метод, если какое-то логическое значение истинно, вы можете положить
else None
для завершения трина.источник
Если для вас определенно произойдет однострочный код, Python 3.8 вводит выражения присваивания, ласково известные как «оператор моржа».
20
Будет назначено ,num
если первое логическое выражениеTrue
. Присвоение должно быть в скобках, иначе вы получите синтаксическую ошибку.источник
Для будущего путешественника из Google, вот новый способ (доступен с Python 3.8 и далее):
источник
Вы можете определенно использовать num1 = (20, если someBoolValue еще num1), если хотите.
источник
Вот что я могу предложить. Используйте другую переменную для получения предложения if и присвойте его num1.
Код:
источник
По-другому
num1 = (20*boolVar)+(num1*(not boolVar))
источник
Вы можете сделать это таким образом.
Вы можете решить вашу проблему таким образом, но использование 'try / Кроме блока' не является лучшей практикой для Python.
источник