2016-09-28 122 views
-2

爲什麼它會在case 3返回77?這不是一個布爾聲明?請注意,情況1和2返回False。情況2和3有什麼區別?Python布爾語句

7 >= 77 and 77 
Out[313]: False 

7 >= 77 and 7 
Out[314]: False 

7 >= 7 and 77 
Out[315]: 77 

7 >= 8 and 77 
Out[318]: False 

感謝

關於@ Kasramvd的評論,我的問題是,一個用戶對問題的精確副本(見下文)

這不是明顯在所有對我來說,一個新手,那我的問題與下面相同。專家可以很容易地看到相同的答案適用於兩者。閱讀答案後,我確實看到了一個鏈接。在得到答案之前,我不可能知道。

我是編程的新手。這是我第一次加入堆棧流。這是我在stackoverflow上的第一個問題。看起來,stackoverflow不是新手友好的。感謝阻止我提出更多問題。也發現了這一點。


其他用戶的問題

我想了解從別人的項目這段代碼。如果你想要的上下文在這裏:https://github.com/newsapps/beeswithmachineguns/blob/master/beeswithmachineguns/bees.py#L501

IS_PY2只是一個布爾變量,如果Python的主要版本是2,則爲True。我知道一個非空字符串是True,但出於某種原因,我不明白openmode被分配'w'或'wt'而不是True或False。

openmode = IS_PY2 and 'w' or 'wt' 
openkwargs = IS_PY2 and {} or {'encoding': 'utf-8', 'newline': ''} 
+0

這不是那麼簡單:http://stackoverflow.com/questions/36550588/assigning-string-with-boolean-expression/36551857#36551857 –

+0

請參閱原始問題的澄清編輯@ Kasramvd –

+0

@HuyNguyen沒有人阻止你從提出更多問題。這是這個社區傾向於管理的最好方式。每個新手都應該在開始之前閱讀[documentation first](http://stackoverflow.com/help/how-to-ask)。 – Kasramvd

回答

0

這是與事實做and短路,並返回truthy值,而不是TrueFalse

在:

7 >= 77 and 7 

7> = 77相當於False,所以and第二個操作數從不會求,所以它成爲False

在:

7 >= 7 and 77 

7是等於7(明顯),因此and第二個操作數進行評價。由於77是真的,它是什麼返回。

0

我相信python的機制和語句是這樣工作的。

and語句中的條件是按順序評估的。如果發現了一個虛假的東西,那麼它就會返回原樣。否則,返回條件中的最後一件事。

在Python中,事物具有真理性或僞造性,而不一定是布爾變量。因此,剛剛返回的第一件事情是虛假的,或者是最後一個條件。在這種情況下,它正在重新調整77,如果你把它放在一個有條件的地方,它將被視爲一個True,因爲77是真實的。

對於離,如果你這樣做

7>=7 and False and 77 # ===> False 
7>=7 and 0 and 77 # ===> 0 
7>=7 and [] and 77 # ===> [] 

所以你看它不返回真/假必然,它只是返回它看到的第一件事falsy或返回的最後一件事。