如果您有一個if語句,其中評估了幾個變量或函數,它們的評估順序是什麼?以Python語言評估的if語句的順序
if foo > 5 or bar > 6:
print 'foobar'
在此特定情況下,將針對FOO的五個進行評估,然後禁止針對6(左到右),或者將其進行評估從右到左?我假設or
和and
按照相同的順序進行評估。
如果您有一個if語句,其中評估了幾個變量或函數,它們的評估順序是什麼?以Python語言評估的if語句的順序
if foo > 5 or bar > 6:
print 'foobar'
在此特定情況下,將針對FOO的五個進行評估,然後禁止針對6(左到右),或者將其進行評估從右到左?我假設or
和and
按照相同的順序進行評估。
左邊的條款將被評估,然後右邊的條款只有第一個是False
。
這就是爲什麼你可以不喜歡的東西:
if not person or person.name == 'Bob':
print "You have to select a person and it can't be Bob"
沒有它打破。
相反,與and
條款,正確的條款將僅第一個是True
評價:
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
運營商短路,並進行評估從左到右:
if (foo > 5) or (bar > 6):
print 'foobar'
如果foo > 5
,然後bar > 6
甚至不會被測試,因爲True or <anything>
將True
。如果foo
不是> 5
,則將測試bar > 6
。
擴大Blender的解釋有點此外,or
運營商有別的事情內置:
<expression A> or <expression B>
這將評估expression A
第一;如果它評估爲True
則由運營商返回expression A
。因此5 or <something>
將返回5
,因爲5
評估爲True
。
如果expression A
評估爲False
,則返回expression B
。因此0 or 5
將返回5
,因爲0
評估爲False
。
當然你也可以鏈你想這是很多:
<expr 1> or <expr 2> or <expr 3> or ... or <expr n>
一般來說,or
將返回第一表達式計算結果爲True
,但保留其原始值。如果沒有表達式的計算結果爲True
,則只會返回最後一個表達式(計算結果爲False
)。
and
操作員以類似但相反的方式工作。它將返回第一個表達式,其確實評估爲False
,但保持其原始值。如果沒有表達式評估爲False
,它將簡單地返回最後一個表達式(將評估爲True
)。
舉個例子,既0 and 5
和5 and 0
將返回0
因爲0
計算結果爲False
,但2 and 3
將返回3
因爲3
是最後的表達,一切都計算爲True
。
以任何方式(回到問題):所有表達式都是從左到右計算的,如果上面的規則允許它,則不會觸及進一步的表達式。
這有什麼做用'if'語句的計算順序,但有一個'或'表達式的計算順序。對於'x =(foo> 5或bar> 6)',或者就此而言,您可以得到完全相同的規則,只是'foo> 5或bar> 6'作爲一個聲明。 – abarnert 2013-04-24 20:22:00
嘗試玩耍,看看會發生什麼。就像這會產生什麼樣的結果;「如果是或否和假和假或假:' – 2013-04-24 20:25:47