Лучший способ выполнить условное назначение в python
Я стараюсь использовать это много, но это уродливо:
a = (lambda x: x if x else y)(get_something())
Итак, я написал эту функцию:
def either(val, alt):
if val:
return val
else:
return alt
Итак, вы можете сделать:
a = either(get_something(), y)
Есть ли встроенная функция для этого (аналогично ISNULL в T-SQL)?
Ответы
Ответ 1
Оператор or
выполняет то, что вы хотите:
get_something() or y
На самом деле он связан с цепочкой, например COALESCE
(и в отличие от ISNULL
). Следующее выражение оценивает самый левый аргумент, который преобразуется в True.
A or B or C
Ответ 2
Вы можете использовать:
a = get_something() or y
Если get_something
True
в булевом контексте, его значение будет присвоено a
. В противном случае - y
будет присвоено значение a
.
Ответ 3
Вы можете использовать простой or
, например:
>>> a = None
>>> b = 1
>>> c = (a or b) # parentheses are optional
>>> c
1
Ответ 4
Я предоставил ответ на этот вопрос другому пользователю. Посмотрите здесь:
Отвечайте на аналогичный вопрос
Чтобы быстро реагировать здесь, выполните:
x = true_value, если условие else false_value
Ответ 5
Легко!
Для более условного кода:
a = b if b else val
Для вашего кода:
a = get_something() if get_something() else val
С этим вы можете выполнять сложные условия следующим образом:
a = get_something() if get_something()/2!=0 else val
Ответ 6
Я также использую форму (a,b)[condition based on the value of a]
, сохраняя результат вызова get_something()
в a
, в редких случаях, которые лучше всего представлены здесь: http://mail.python.org/pipermail/python-list/2002-September/785515.html
...
a=0 b=None a or b => None (a,b)[a is None] => 0
a=() b=None a or b => None (a,b)[a is None] => ()
...