Одна строка, если-условие-назначение



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



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 часть.



спасибо

531   9  

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 работает немного по-другому.

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

num1 = 20 if someBoolValue else num1

в одну строку:

if someBoolValue: num1 = 20

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

if someBoolValue:
    num1 = 20

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

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

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

(falseVal, trueVal)[TEST]

TEST and trueVal or falseVal

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

if someBoolValue:
    num1 = 20
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
num1 = 20 * someBoolValue or num1

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

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

код:

num2 =20 if someBoolValue else num1
num1=num2

Comments

    Ничего не найдено.