О конструкции a and a or b и ее современном варианте

В исходниках IPython можно встретить такой код:

oname = args and args or '_'

В чем смысл такой конструкции, если можно просто использовать args or '_'?

На это есть историческая причина: в ранних версиях Python отсутствовал тернарный оператор.

В современном Python тернарный оператор выглядит следующим образом:

[on_true] if [expression] else [on_false]

x, y = 10, 20
value = x if x < y else y

Такой синтаксис появился в Python 2.5, а в ранних версиях языка было принято использовать следующую конструкцию:

[expression] and [on_true] or [on_false]

Однако эта идиома небезопасна, поскольку она может давать неправильные результаты, когда on_true имеет ложное логическое значение. Поэтому всегда лучше использовать современную форму:

[on_true] if [expression] else [on_false]