我一直在浏览pyparsing
库的代码。在那里,我找到了以下片段:
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或使用None)if not result
都会做正确的事。
那为什么要添加or None
?我错过了什么?为什么None
优于False
?
答案 0 :(得分:3)
作者希望result
为None
或匹配对象。如果没有or None
,如果第一次测试失败,result
将由于短路规则而成为False
。