Одна строка if-condition-assign

У меня есть следующий код

num1 = 10 someBoolValue = True 

Мне нужно установить значение num1 в 20 если someBoolValueTrue ; и ничего не делать. Итак, вот мой код для этого

 num1 = 20 if someBoolValue else num1 

Есть ли что-то, что я мог бы избежать ...else num1 part, чтобы сделать его более чистым? Эквивалент

 if someBoolValue: num1 = 20 

Я попытался заменить его на ...else pass следующим образом: num1=20 if someBoolValue else pass . Все, что я получил, это синтаксическая ошибка. И я не мог просто опустить ...else num1 часть ...else num1 .

благодаря

Я не думаю, что это возможно в 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 работает немного по-другому.

Использовать это:

 num1 = 20 if someBoolValue else num1 

В одной строке:

 if someBoolValue: num1 = 20 

Но не делайте этого. Этот стиль обычно не ожидается. Люди предпочитают более длинную форму для ясности и последовательности.

 if someBoolValue: num1 = 20 

(Также следует избегать верблюжьих колпачков, поэтому используйте some_bool_value .)

Обратите внимание, что выражение in-line some_value if predicate без части else не существует, потому что не было бы возвращаемого значения, если предикат был ложным. Однако во всех случаях выражения должны иметь четко определенное возвращаемое значение. Это отличается от использования, например, в Ruby или Perl.

Нет. Думаю, вы надеялись, что что-то вроде num1 = 20 if someBoolValue будет работать, но это не так. Я думаю, что лучший способ – с выражением if как вы его написали:

 if someBoolValue: num1 = 20 

вы можете использовать одно из следующих действий:

 (falseVal, trueVal)[TEST] TEST and trueVal or falseVal 
 num1 = 20 * someBoolValue or num1