ブール演算子の引数にはブール値だけが使えるわけではない.
>>> string1, string2, string3 = '', 'Trondheim', 'Hammer Dance'
>>> non_null = string1 or string2 or string3
>>> non_null
'Trondheim'
このような性質を利用するといわゆる「?:」オペレータに近いものが実装できる.(あくまで同値ではない)
result = オブジェクトA and オブジェクトB or オブジェクトC
のように記述する.ただしオブジェクトBはTrueと評価されるオブジェクトであること.
- オブジェクトAがTrueの場合、オブジェクトA and オブジェクトBがTrueと評価されるので、オブジェクトCの評価を行わず、オブジェクトBを返す.
- オブジェクトAがFalseの場合、オブジェクトA and オブジェクトBはFalseと評価される.次のブール演算子が「or」であるためオブジェクトCまで評価され、オブジェクトCを返す.
- 「None」や「''」はFalseと評価されるオブジェクトである
- 「?:」オペレータと同じ実装になるのはオブジェクトBがTrueと評価されるオブジェクトの場合のみ
参照 >>> python チュートリアル:5.7. 条件についてもう少し