Я предполагаю, что это удержание от древних (2.4 или более ранних) вариантов Python, где троичный оператор еще не был доступен для языка. Согласно FAQ по программированию на Python :
Есть ли эквивалент троичного оператора C??:?
Да, есть. Синтаксис выглядит следующим образом:
[on_true] if [expression] else [on_false]
x, y = 50, 25
small = x if x < y else y
До того, как этот синтаксис был представлен в Python 2.5, распространенной идиомой было использование логических операторов:
[expression] and [on_true] or [on_false]
Однако эта идиома небезопасна, так как она может давать неверные результаты, когда on_true имеет ложное логическое значение. Поэтому всегда лучше использовать форму ... если ... еще ...
Рассматриваемая строка теперь может быть записана как:
# Option 1
oname = args if args else '_'
# Option 2
oname = args or '_'
Оба дают одинаковый результат, так как в этом случае часть [expression]
варианта 1 идентична части [on_true]
. На мой взгляд, вариант 2 можно считать сокращенной формой варианта 1 для случаев, когда [expression]
и [on_true]
идентичны. Какой из них вы выберете, это личное предпочтение.
Это может дать нам подсказку о том, сколько времени прошло с тех пор, как этот код был затронут!