and
とor
オペレーターはしないでくださいオペランドに対してブール演算を実行するだけで、結果はブール値になります。それらの結果は、常にのオペランドの1つです。これらの演算子は左から右へと評価され、or
より高い優先順位を持つand
があり、それらは短絡します。つまり、できるだけ早くオペランドの評価を停止します。
純粋なブール論理では、は、x
に関係なくFalse
であるため、x
を調べる必要はありません。 Pythonの式False and x
はFalse
の結果を返し、x
の評価を試みません。したがって、False and some_function()
はではなく、some_function()
となります。 x
がさもなければ、True and x
がTrue
あるそのFalse
True
ある場合
同様に、純粋なブール論理でTrue and x
は、すなわち、x
同じ真理値を有するであろう。
しかし、Python and
演算子は任意のオペランドを処理できます。
a and b
a
がfalse-ishの場合、b
は評価されず、結果はa
になります。 a
がtrue-ishの場合、b
はとなり、結果になります。ここ
は、Python 2を使用して、短いデモです:
print False and 'boolean'
print 0 and 'integer'
print '' and 'string'
print [] and 'list'
print
print True and 'boolean'
print 7 and 'integer'
print 'a' and 'string'
print [42] and 'list'
print
print True and False
print True and 0
print True and ''
print True and []
print
出力
False
0
[]
boolean
integer
string
list
False
0
[]
(空の文字列が印刷されつつある場合0
と[]
との間のこれらの空白行です)。
同様の考慮事項がor
オペレータに適用されます。純粋なブール論理で
、True or x
は関係なくor
式の最初の部分は、我々は第二部を評価する必要はありません本当っぽいの場合はそうである何x
、True
ではありません。 False or x
の真偽値はx
です。
print False or 'boolean'
print 0 or 'integer'
print '' or 'string'
print [] or 'list'
print
print True or 'boolean'
print 7 or 'integer'
print 'a' or 'string'
print [42] or 'list'
print
print False or False
print False or 0
print False or ''
print False or []
print
私が先に言ったように
boolean
integer
string
list
True
7
a
[42]
False
0
[]
出力は、これらの演算子は左から右に評価され、私たちが望むならば、我々はそれらをチェーンすることができます。ここでは "古典的な" 例です:
print True and 'yes' or 'no'
print False and 'yes' or 'no'
これらのステートメントは、建設は、Pythonの初期のバージョンでは一般的であったことを出力
yes
no
print (True and 'yes') or 'no'
print (False and 'yes') or 'no'
に相当します。一般and
とor
を使用して三元表現よりも読みやすいと考えられている
print 'yes' if True else 'no'
print 'yes' if False else 'no'
:これらの日、それはif
表現を見ることがはるかに一般的です。また、a and b or c
はではなく、b
がfalse-ishの場合、b if a else c
に相当するではありません。
しかし、特に以前のコードを読んだり維持したりする必要がある場合は、この三元語and ... or
の仕組みを理解することが重要です。そして古いPythonistのなかにはまだand ... or
という形式が好きですが、それがどういう仕組みか分からないときにはちょっと変わってしまいます。 :)