11

Python では、次のことができます。

if True or blah:
    print("it's ok") # will be executed

if blah or True: # will raise a NameError
    print("it's not ok")

class Blah:
    pass
blah = Blah()

if blah or blah.notexist:
    print("it's ok") # also will be executed
  • この機能に関するドキュメントを教えてもらえますか?
  • それは言語の実装の詳細または機能ですか?
  • この機能を利用するのに適したコーディング スタイルですか?
4

4 に答える 4

30

および短絡については、ブール演算のドキュメントを参照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 として解釈されます: FalseNone、すべての型の数値ゼロ、および空の文字列とコンテナー (文字列、タプル、リスト、辞書、セットを含む)およびフリーズセット)。他のすべての値は 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

これらを連鎖させないように注意し、該当する場合は代わりに条件式を使用してください。

于 2013-04-17T20:21:38.077 に答える
2

演算子を使用するorと、値は左から右に評価されます。1 つの値が に評価された後True、ステートメント全体が に評価されTrueます (したがって、それ以上の値は評価されません)。

  • 公式文書
  • 言語の特徴です
  • その機能を使用するのに何の問題もありません
于 2013-04-17T21:52:21.160 に答える