« javascriptで動的にiframeを作成する | メイン | 2GBより大きなファイルの扱い »

pythonのブール演算子 and や or

ブール演算子の引数にはブール値だけが使えるわけではない.

>>> 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. 条件についてもう少し

トラックバック

このエントリーのトラックバックURL:
http://blogs.topaz.ne.jp/mt/MT-3.37-ja/mt-tb.cgi/238