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()を使っています。