および短絡については、ブール演算のドキュメントを参照orしてください。and
式x and yは最初に評価されxます。が false の場合x、その値が返されます。それ以外の場合yは評価され、結果の値が返されます。
式x or yは最初に評価されxます。が true の場合x、その値が返されます。それ以外の場合yは評価され、結果の値が返されます。
forがTrue 値に評価される場合にのみand評価されることに注意してください。逆に、 forはFalse 値に評価された場合にのみ評価されます。yxoryx
最初の式の場合、最初の部分がすでに であるため、True or blahこれは が評価されないことを意味します。blahTrue
さらに、カスタムBlahクラスは True と見なされます。
ブール演算のコンテキストで、また制御フロー ステートメントで式が使用される場合、次の値は false として解釈されます: False、None、すべての型の数値ゼロ、および空の文字列とコンテナー (文字列、タプル、リスト、辞書、セットを含む)およびフリーズセット)。他のすべての値は true として解釈されます。(__nonzero__()これを変更する方法については、特別な方法を参照してください。)
__nonzero__()クラスはメソッド (またはメソッド) を実装していないため、ブール式に関する限り__len__考慮されます。True
したがって、式blah or blah.notexistでは、blahは真であり、blah.notexist評価されません。
この機能は、経験豊富な開発者によって非常に定期的かつ効果的に使用されており、ほとんどの場合、デフォルトを指定するために使用されます。
some_setting = user_supplied_value or 'default literal'
object_test = is_it_defined and is_it_defined.some_attribute
これらを連鎖させないように注意し、該当する場合は代わりに条件式を使用してください。