1

私の関数の一部に特定のバグが見つかりました。ビット単位の比較ORの引数の順序が重要であるようです。

In: None or False
Out: False

In: False or None
Out: None

Python2.7.2とIPython0.10.2を使用してこれを確認しました。

1つの要素がNoneの場合、次のように、彼が比較の最初の引数であることを確認できます。

if a==None:
    a or b
else:
    b or a

しかし、OR比較で順序を変更すると出力に影響する理由を誰かに説明してもらえますか?これはPythonに特有ですか?

ありがとう。

4

3 に答える 3

8

入力からhelp("or")

x or yは最初にxを評価します。xがtrueの場合、その値が返されます。それ以外の場合は、yが評価され、結果の値が返されます。

ではNone or False、Noneはtrueではないため、Falseが返されます。

ではFalse or None、Falseはtrueではないため、Noneが返されます。

于 2012-10-03T13:38:11.677 に答える
1

DSMは、orオペレーターが行うことを説明しました。結果がブール値になることを期待しているので、None or FalseまたはFalse or None常にそうFalseですか?もしそうなら、あなたはそれについて明確にし、どちらかを使用する必要がありますbool(None or False)、またはあなたがそれらをたくさん持っていた場合は、それからany([None, False])など...

于 2012-10-03T13:44:36.847 に答える
0

論理演算子の順序が重要ではない言語を見たことがありません。そのような言語を見たorことない限り、Pythonの動作は正常です。

orステートメントを左から右に処理して、そのうちの1つがTrueになるまで(または最後に到達するまで)処理します。

andステートメントを左から右に処理して、そのうちの1つがFalseになるまで(または最後に到達するまで)処理します。

ビット単位または演算子(ほとんどの言語と同様にPythonの場合)はパイプ'|'です。

于 2012-10-03T13:57:03.650 に答える