JavaまたはCでは<condition> ? X : Y
があり、これはPythonにX if <condition> else Y
と変換されます。XとYまたはZ-三項演算子
しかし、この小さなトリックもあります:<condition> and X or Y
です。
私は前述の三項演算子と同等であることを理解していますが、and
とor
演算子が正しい結果をどのように生成できるかを理解することは困難です。これの背後にある論理は何ですか?
JavaまたはCでは<condition> ? X : Y
があり、これはPythonにX if <condition> else Y
と変換されます。XとYまたはZ-三項演算子
しかし、この小さなトリックもあります:<condition> and X or Y
です。
私は前述の三項演算子と同等であることを理解していますが、and
とor
演算子が正しい結果をどのように生成できるかを理解することは困難です。これの背後にある論理は何ですか?
私はそれが前述の三元 事業者
と同等だということを理解しながらこれは正しくありません。
In [32]: True and 0 or 1
Out[32]: 1
In [33]: True and 2 or 1
Out[33]: 2
条件がある一方、最初の式が、1
(すなわちY
)を返すのはなぜTrue
であり、「期待される」回答は0
(すなわちX
)ですか?ドキュメントによれば
:
式xとyの最初の評価するのX。 xがfalseの場合、その値は です。それ以外の場合は、yが評価され、結果の値は です。
式xまたはyは、まずxを評価します。 xがtrueの場合、その値は です。それ以外の場合は、yが評価され、結果の値は です。
ので、True and 0 or 1
はTrue
あるand
オペレータの最初の引数を評価します。次に、第2引数(0
)を返します。
、or
オペレータは第二引数(すなわち1
)
を返し、偽値True and 0
戻って以来、私は最初にそれがTrue
だ場合X
がTrueと評価された場合、それはX
を実行し、Y
を実行スキップ<condition>
をチェックすることを考えます
<condition>
が失敗した場合は、X
をスキップしてOR文を実行し、Y
を実行します。
A and B
を調べると、A
がTrue
の場合にのみB
が評価されます。
このように、A or B
では、B
は、A
がFalse
の場合にのみ評価されます。 <condition>
がFalse
ある場合<condition>
はTrue
とY
ある場合
したがって、<condition> and X or Y
はX
を返します。これは短絡の結果であり、and
がor
よりも優先されていることが原因です。
ただし、この方法には注意が必要です。
X = 0 # or '' or []
Y = 2
print(True and X or Y)
>> 2
トリックはどのようにpythonのである:に比べ
X = 1
Y = 2
print(True and X or Y)
>> 1
:X
自体が(例えば、空の文字列、リストや0
)False
に評価されている場合、<condition> and X or Y
は<condition>
がTrue
場合でもY
を返します。ブール演算子work
式
x and y
は最初にx
を評価します。x
がfalseの場合、その値が返されます。それ以外の場合はy
が評価され、結果の値が返されます。式
x or y
は、最初にx
を評価します。x
が真の場合、その値が返されます。それ以外の場合はy
が評価され、結果の値が返されます。
これは、and
の優先度がor
より高いという事実を利用しています。
したがって、<condition> and X or Y
は、(<condition> and X) or Y
です。 <condition> and X
がTrue
と評価された場合は、True or Y
がTrue
であるため、さらに評価する必要はありません。 <condition> and X
がFalse
と評価された場合、YはFalse or Y
として返されます。基本的にはY
です。
'とX'という表現は' X'( ''が 'False'の場合は' False')に解決されます。 'または'演算子の働きと同様です。つまり、特殊な構文ではなく、2つの演算子を組み合わせたものです。 –
SuperBiasedMan
ここでは、プロセスの手順を分解して説明します。[Pythonの論理演算子AND](http://stackoverflow.com/questions/18195322/pythons-logical-operator-and) – SuperBiasedMan
[this回答](http://stackoverflow.com/a/36551857/4014959)役立ちます。 –