2013-04-24 7 views
8

です。いくつかの変数または関数が評価されるif文をどの順序で評価するのですか?この特定の場合において Pythonで評価されたif文の順番は

if foo > 5 or bar > 6: 
    print 'foobar' 

は、5に対して評価した後(左から右へ)6に対して棒またはそれが右から左に評価されることがFOOのだろうか?私はorandが同じ順序で評価されていると仮定しています。

+3

これは 'if'文の評価の順序とは何の関係もありませんが、' or'式の評価の順序を持​​ちます。 'x =(foo> 5またはbar> 6)'の場合、または 'foo> 5またはbar> 6'の場合とまったく同じルールを独自の文として取得します。 – abarnert

+2

遊んでみて、何が起こるか見てみてください。それが真実か偽か、偽と偽か偽であるかどうか) –

答えて

18

最初に左括弧が評価され、最初の句が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: 
    # ... 

personNoneときにそれ以外の場合は例外がスローされます。

7

左から右に評価されます。

>>> 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 
1

Pythonのorオペレータ短絡し、それが左から右に評価されます:foo > 5場合、bar > 6TrueなりますTrue or <anything>として、テストされません

if (foo > 5) or (bar > 6): 
    print 'foobar' 

foo> 5でない場合、bar > 6がテストされます。これはexpression A最初に評価します

<expression A> or <expression B> 

;:

3

ビットさらにBlenderの説明を展開するには、orオペレータは、何か他のものを内蔵していTrueと評価された場合、オペレータはexpression Aを返します。従って5 or <something>5を返します。5Trueと評価されます。

expression AFalseと評価された場合、expression Bが返されます。したがって0Falseと評価されるので、0 or 55を返します。もちろん

あなたは連鎖したいと、このように多くのことができます。一般的には

<expr 1> or <expr 2> or <expr 3> or ... or <expr n> 

を、orTrueと評価さ最初表現を返しますが、元の値を維持します。 Trueと評価される式がない場合は、最後の式が返されます(評価はFalse)。

andオペレータは、同様の逆の方法で動作します。 最初にという式が返されます。この式はFalseと評価されますが、元の値を保持します。 Falseと評価される式がない場合は、最後の式が返されます(評価はTrue)。

3は、最後の式とすべてがTrueと評価されているので、0Falseに評価されますが、2 and 33を返しますので、一例として、0 and 55 and 0両方が0を返します。

質問に戻るには:すべての式が左から右に評価されます。上のルールで許可されている場合は、さらに式には触れません。

関連する問題