複数の or 演算子が予期しない結果を生成する理由
Python では、複数の or 演算子を含む式を評価すると誤解を招く可能性があります。たとえば、次のコード行を考えてみましょう。
if name == "Kevin" or "Jon" or "Inbar":
この行は、権限のないユーザーにアクセスを許可することを意図していますが、実際にはすべてのユーザーにアクセスを許可します。その理由を理解するには、演算子の動作を調べる必要があります。
複数の Or の問題
英語では、「or」は複数の節を接続し、少なくとも 1 つの節を意味します。それは真実でなければなりません。ただし、Python では、「A or B or C」のような式は「(A or B) or C」として解析されます。これは、最初の式のみが評価されることを意味します。 true の場合、式全体が true です。
解決策 1: 複数の等価演算子
「名前」を各許可ユーザーと正しく比較するには、複数の等価演算子を使用します。 :
if name == "Kevin" or name == "Jon" or name == "Inbar":
解決策 2: 設定するメンバーシップ
別の解決策は、承認された名前のセットを使用してメンバーシップを確認することです:
authorized = {"Kevin", "Jon", "Inbar"} if name in authorized:
解決策 3: 任意のオペレータ
any() 関数は、承認された名前を反復処理し、それらのいずれかが一致する場合に True を返すために使用することもできます。 "name":
authorized = ["Kevin", "Jon", "Inbar"] if any(name == auth for auth in authorized):
パフォーマンス
3 つのソリューションのうち、セット メンバーシップが最高のパフォーマンスを提供し、次に複数の等価演算子が続きます。 any() を使用するのが最も効率的ではありません。
以上がPython で複数の「or」演算子が予期しないブール結果を生成するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。