Подтвердить что ты не робот

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

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

num1 = 10
someBoolValue = True

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

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.

4b9b3361

Ответ 1

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

Ответ 2

Используйте это:

num1 = 20 if someBoolValue else num1

Ответ 3

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

if someBoolValue: num1 = 20

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

if someBoolValue:
    num1 = 20

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

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

Ответ 4

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

(falseVal, trueVal)[TEST]

TEST and trueVal or falseVal

Ответ 5

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

if someBoolValue:
    num1 = 20

Ответ 6

num1 = 10 + 10*(someBoolValue == True)

Это мой новый окончательный ответ. Предыдущий ответ был следующим и был чрезмерным для заявленной проблемы. Getting_too_clever == not Good. Здесь предыдущий ответ... все еще хорошо, если вы хотите добавить одну вещь для True cond и другую для 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

Ответ 7

num1 = 20 * someBoolValue or num1

Ответ 8

Вы можете определенно использовать num1 = (20, если someBoolValue else num1), если хотите.

Ответ 9

Вот что я могу предложить. Используйте другую переменную для вывода предложения if и назначьте ее num1.

Код:

num2 =20 if someBoolValue else num1
num1=num2

Ответ 10

Другой способ num1 = (20*boolVar)+(num1*(not boolVar))

Ответ 11

Это выглядит чище для меня, хотя логически и по исполнению похоже на код в вопросе:

num1 = {True: 20, False: num1} [num1<20]

Ответ 12

Если вы хотите вызвать метод, если для некоторого логического значения задано значение true, вы можете указать else None для завершения трина.

>>> a=1
>>> print(a) if a==1 else None
1
>>> print(a) if a==2 else None
>>> a=2
>>> print(a) if a==2 else None
2
>>> print(a) if a==1 else None
>>>

Ответ 13

Вы можете сделать это таким образом.

try:
    a = [i for i in [20] if False][0]
except IndexError:
    print("Do what ever you want here")

Вы можете решить свою проблему таким образом, но использование 'try/Кроме блока' не является лучшей практикой для Python.