Python で試した次の論理演算の出力が異なるのはなぜですか?
-1 or 1
1 or -1
ファーストリターン-1
とセカンドリターン1
Python で試した次の論理演算の出力が異なるのはなぜですか?
-1 or 1
1 or -1
ファーストリターン-1
とセカンドリターン1
and
そしてor
どちらも怠け者です。結果を決定できるまでオペランドを評価します (and
最初のオペランドで停止します。最初のFalse
オペランドor
で停止しますTrue
)。ドキュメントに記載されているように、評価された最後のオペランドを返します。
およびに返される値と型を制限し
and
たり制限したりせず、最後に評価された引数を返すことに注意してください。これは便利な場合があります。たとえば、が空の場合にデフォルト値に置き換える必要がある文字列である場合、式は目的の値を生成します。or
False
True
s
s or 'foo'
ドキュメントを読む:
式
x or y
は最初に評価されx
ます。が true の場合x
、その値が返されます。それ以外の場合y
は評価され、結果の値が返されます。
最初の部分-1
と両方1
が評価されTrue
、返されます。2 番目の部分は無視されます。
or
オペレーターがショートします。True
ブール コンテキストにある最初の値、またはそうでない場合は最後に評価された式を返します。-1
と1
は両方ともTrue
ブール コンテキストにあるため、最初の数値を取得します。
0
、None
およびすべての空のコンテナは に評価されFalse
ます。
例えば:
>>> 0 or 5
5
>>> '' or []
[]
or
最初の条件が true の場合、2 番目の条件は評価されず、
OPは、「or」の戻り値がTrueまたはFalseのいずれかであることを期待していると思います(他の言語のブール演算子の場合と同様)。
Python は、Perl と同様に、単純に最初の「真」の値を返します (「真」とは、数値の場合はゼロ以外、文字列の場合は空でないこと、None などではないことを意味します)。
同様に、「and」は、両方が「true」の場合にのみ、最後の値を返します。
彼はおそらく、次のような結果にさらに驚かれることでしょう。
{'x':1} or [1,2,3]
Perl プログラマーは、この構文を慣用的に使用することがよくあります ( のようにopen(FILE, "foo.txt") || die
; Python で一般的かどうかはわかりません。
(男を参照)