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たり制限したりせず、最後に評価された引数を返すことに注意してください。これは便利な場合があります。たとえば、が空の場合にデフォルト値に置き換える必要がある文字列である場合、式は目的の値を生成します。orFalseTruess 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 で一般的かどうかはわかりません。
(男を参照)