a or b or c or ...

orの連続は、最初に真になる値を探します。真値が見つかったら残りの式は実行されません。

a or b or c or None

これを可変長にしてみようと思います。reduceを使えば対応できそうですが、orの演算関数版がありません(operator.or_は「a | b」ビット演算の方です)。
仕方なくlambdaで作ったところで「残りの式を実行されないように」することができません。次のreduceはいちおう正しく動きますが「'' or 3」で処理は終了せず「3 or None」「3 or 1」と続きます。

x = ['', 3, None, 1]
print reduce(lambda a,b:a or b, x)

ということでイテレータ版を考えてみます。

from itertools import ifilter
print next(ifilter(None, x), None)

真値のみ返すイテレータからnext()で最初の1つだけ取り出します。ただ要素が全部偽のときStopIterationを出してしまうので、デフォルト値を指定できる組み込みのnext()を使っています。