5 <(5または10)が5 <(10または5)とどのように異なるかはわかりません。

5 <(5または10)が5 <(10または5)とどのように異なるかはわかりません。

昨日この質問をしました。 Print( 5 <( 5 or 10)) <- 出力は False です。 Print( 5 <( 10 or 5)) <- 出力は True です。わかりません。 Pythonがどのように読み取るのと同じように、場合によってはFalse、他の場合はTrueであるのですか?

私の考えでは、一見したように分布していないということです。 5 <(5または10)!= 5 < 5または5 < 10。

Pythonがこの関数をどのように読んでいるのか、その意味が何であるかを知りたいです。 ここに画像の説明を入力してください。

ここに画像の説明を入力してください。

ベストアンサー1

コード行(または行グループ)を見て、そのコードが何をしているのかを理解したい場合は、良い戦略は行をコンポーネント部分に分割することです。この行がなぜ別の結果を返すのか疑問に思います。

>>> print( 5 < ( 5 or 10 ) )
False
>>> print( 5 < ( 10 or 5 ) )
True

だから分解してみましょう。このコード行の唯一の違いはかっこ式と( 5 or 10 )その( 10 or 5 )ため、Pythonがこれをどのように処理するかを見てみましょう。

>>> ( 5 or 10 )
5
>>> ( 10 or 5 )
10

print()この時点で、2つのステートメントの出力が異なる理由が明確になるはずです。つまり、実際にはそれぞれprint( 5 < 5 )print( 5 < 10 )- です。FalseTrue

しかし、なぜtoとtoを( 5 or 10 )評価するのですか?そのために、実際の状況を相談しました。5( 10 or 5 )10Pythonドキュメント、ブール演算子の関連セクションにありますor

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

Pythonで「真実」がどのように機能するかを理解するならば、これは意味があります。数値の場合、0sum0.0はfalse(つまり、ブール演算で評価される値False)であり、他のすべての値はtrue(つまり評価されるTrue)です。 5または10はいずれもfalseではないため、各括弧で最初の値が返されます。その値自体はTrue依然としてブールテストで評価されているからです。

>>> x = 5
>>> if x:
...   print( f'{x} is truthy enough for me!' )
...
5 is truthy enough for me!

潜在的なユースケースでは、orSQLと同様の方法で作業できますCOALESCE()(つまり、falseではなく最初の値を返します)。各変数を持つ変数セットが必要です。できるこれはプログラムに適しており、優先順位を指定したい値を実際の値に設定する(x or y or z)きちんとした方法です。

おすすめ記事