2017-07-25 70 views
4

我一直在瀏覽pyparsing庫的代碼。在那裏,我發現下面的代碼片段:這段代碼中`or None`的用途是什麼?

result = instring[loc] == self.firstQuoteChar and self.re.match(instring,loc) or None 
    if not result: 
     raise ParseException(instring, loc, self.errmsg, self) 

    loc = result.end() 
    ret = result.group() 

熬下來多一些,我的result的理解有:

result = firstCharacterIsCorrect(...) and self.re.match(...) or None 

這是我不明白:爲什麼有or None在那裏?

如果第一個字符不正確,沒有or None,我們得到False。如果它是正確的,但是正則表達式失敗,我們會從失敗的匹配中獲得None

無論哪種情況(帶有False或無)if not result都會做正確的事情。

那麼爲什麼要加or None?我錯過了什麼?爲什麼None更可取爲False

+0

正如@MarkTolonen建議的那樣,我用[tag:pyparsing]標記了問題以詢問圖書館的作者... – Arkadiy

回答

3

作者想要resultNone或匹配對象。沒有or None,如果第一次測試失敗result由於短路規則將是False

+0

我不明白的是 - False有什麼問題?它的使用方式,False也可以做到。我錯過了什麼? – Arkadiy

+1

@Arkadiy'False'是不明確的,因爲有很多對象可能本身就是錯誤的,例如, '0',''''''''''''等''None'是一個明確的非布爾型對象,對於「無」具有明確的含義。 – pylang

+1

@pylang嗯...我有點看到你的觀點。但是,只是爲了清楚起見:代碼片段中有沒有比False更好的東西? – Arkadiy