2017-07-25 7 views
4

私は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が得られます。

どちらの場合でも(偽またはなしで)if not resultは正しいことを行います。

なぜ、or Noneを追加しますか?私は何が欠けていますか? NoneFalseになるのはなぜですか?

+0

@ MarkTolonenの提案によれば、私は[tag:pyparsing]でタグを付けて図書館の著者に尋ねました。 – Arkadiy

答えて

3

著者はをNoneまたは一致オブジェクトにします。 or Noneがないと、最初のテストが失敗した場合、短絡ルールのためresultFalseになります。

+0

私が理解していないのは、何がFalseですか?それが使用されている方法では、Falseも同様に機能します。私は何が欠けていますか? – Arkadiy

+1

@Arkadiy 'False'は、本質的に偽である可能性がある多くのオブジェクトが存在するため、あいまいです。 '0'、' [] '、' '" 'などです。' None'は、「何もない」という明白な意味を持つ明示的でブールでないオブジェクトです。 – pylang

+1

@pylang hmm ...私はあなたの意見を見ています。しかし、分かりやすくするために、コードフラグメントにNoneをFalseよりも優れたものがありますか? – Arkadiy

関連する問題