です。いくつかの変数または関数が評価されるif文をどの順序で評価するのですか?この特定の場合において Pythonで評価されたif文の順番は
if foo > 5 or bar > 6:
print 'foobar'
は、5に対して評価した後(左から右へ)6に対して棒またはそれが右から左に評価されることがFOOのだろうか?私はor
とand
が同じ順序で評価されていると仮定しています。
です。いくつかの変数または関数が評価されるif文をどの順序で評価するのですか?この特定の場合において Pythonで評価されたif文の順番は
if foo > 5 or bar > 6:
print 'foobar'
は、5に対して評価した後(左から右へ)6に対して棒またはそれが右から左に評価されることがFOOのだろうか?私はor
とand
が同じ順序で評価されていると仮定しています。
最初に左括弧が評価され、最初の句がFalse
である場合にのみ右句が評価されます。それは壊すことなく
if not person or person.name == 'Bob':
print "You have to select a person and it can't be Bob"
:あなたのようなものを行うことができる理由
です。最初のものはTrue
ある場合
は逆に、and
句で、右の句にのみ評価されます。
if person and person.name:
# ...
person
がNone
ときにそれ以外の場合は例外がスローされます。
左から右に評価されます。
>>> def a():
... print 'a'
... return False
...
>>> def b():
... print 'b'
... return False
...
>>> print a() or b()
a
b
False
>>> def c():
... print 'c'
... return True
...
>>> print c() or a()
c
True
Pythonのor
オペレータ短絡し、それが左から右に評価されます:foo > 5
場合、bar > 6
もTrue
なりますTrue or <anything>
として、テストされません
if (foo > 5) or (bar > 6):
print 'foobar'
。 foo
が> 5
でない場合、bar > 6
がテストされます。これはexpression A
最初に評価します
<expression A> or <expression B>
;:
ビットさらにBlenderの説明を展開するには、or
オペレータは、何か他のものを内蔵していTrue
と評価された場合、オペレータはexpression A
を返します。従って5 or <something>
は5
を返します。5
はTrue
と評価されます。
expression A
がFalse
と評価された場合、expression B
が返されます。したがって0
はFalse
と評価されるので、0 or 5
は5
を返します。もちろん
あなたは連鎖したいと、このように多くのことができます。一般的には
<expr 1> or <expr 2> or <expr 3> or ... or <expr n>
を、or
はTrue
と評価さ最初表現を返しますが、元の値を維持します。 True
と評価される式がない場合は、最後の式が返されます(評価はFalse
)。
and
オペレータは、同様の逆の方法で動作します。 最初にという式が返されます。この式はFalse
と評価されますが、元の値を保持します。 False
と評価される式がない場合は、最後の式が返されます(評価はTrue
)。
3
は、最後の式とすべてがTrue
と評価されているので、0
がFalse
に評価されますが、2 and 3
は3
を返しますので、一例として、0 and 5
と5 and 0
両方が0
を返します。
質問に戻るには:すべての式が左から右に評価されます。上のルールで許可されている場合は、さらに式には触れません。
これは 'if'文の評価の順序とは何の関係もありませんが、' or'式の評価の順序を持ちます。 'x =(foo> 5またはbar> 6)'の場合、または 'foo> 5またはbar> 6'の場合とまったく同じルールを独自の文として取得します。 – abarnert
遊んでみて、何が起こるか見てみてください。それが真実か偽か、偽と偽か偽であるかどうか) –