Лучший способ выполнить условное назначение в 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] => ()
...