ホームページ > バックエンド開発 > Python チュートリアル > Python で複数の「or」演算子が予期しないブール結果を生成するのはなぜですか?

Python で複数の「or」演算子が予期しないブール結果を生成するのはなぜですか?

Linda Hamilton
リリース: 2024-12-31 03:44:09
オリジナル
1003 人が閲覧しました

Why Do Multiple `or` Operators in Python Produce Unexpected Boolean Results?

複数の 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート