77
In [20]: print None or False
-------> print(None or False)
False

In [21]: print False or None
-------> print(False or None)
None

この振る舞いは私を混乱させます。誰かが私になぜこれがこのように起こっているのか説明できますか? どちらも同じように振る舞うことを期待していました。

4

6 に答える 6

111

式は true の場合、またはfalse の場合にx or y評価されます。xxyx

上記の文の「真」と「偽」は、固定値Trueとではなく、「真偽」について話していることに注意してくださいFalse。「真」である何かがifステートメントを成功させます。「偽」のものは失敗します。「偽」の値には、、、およびFalse(空のリスト) が含まれます。None0[]

于 2010-10-12T12:31:47.820 に答える
16

or演算子は、最初のオペランドの値が Python ブール値の意味で true (別名「真実」) である場合、その値を返します。それ以外の場合、2 番目のオペランドの値を返します現在のオンライン ドキュメントに関するセクションにあるブール演算というタイトルのサブセクションを参照してください。

どちらの例でも、最初のオペランドは false と見なされるため、2 番目のオペランドの値は式を評価した結果になります。

于 2010-10-12T13:16:08.353 に答える
5

密接に関連するトピック: Pythonorand short-circuit。論理or演算では、いずれかの引数が true の場合、すべてが true になり、他に何も評価する必要はありません。Python は即座にその「真の」値を返します。処理が終了し、true がなかった場合は、最後に処理した引数を返します。これは "false" 値になります。

and反対に、偽の値が見つかった場合は、その「偽」の値ですぐに終了するか、すべてを通過した場合は、最終的な「真」の値を返します。

>>> 1 or 2 # first value TRUE, second value doesn't matter
1
>>> 1 and 2 # first value TRUE, second value might matter
2
>>> 0 or 0.0 # first value FALSE, second value might matter
0.0
>>> 0 and 0.0 # first value FALSE, second value doesn't matter
0
于 2010-10-12T13:57:37.193 に答える
2

ブールの観点からは、どちらも同じように動作し、どちらも false と評価される値を返します。

or与えられた値を単に「再利用」し、それが true の場合は左の値を返し、そうでない場合は右の値を返します。

于 2010-10-12T12:33:07.007 に答える
1
Condition1 or Condition2

Condition1 が False の場合、Condition2 を評価して返します。False と評価されるものはありません。

于 2010-10-12T12:33:49.720 に答える