Maison > développement back-end > Tutoriel Python > Pourquoi plusieurs opérateurs « ou » en Python produisent-ils des résultats booléens inattendus ?

Pourquoi plusieurs opérateurs « ou » en Python produisent-ils des résultats booléens inattendus ?

Linda Hamilton
Libérer: 2024-12-31 03:44:09
original
1003 Les gens l'ont consulté

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

Pourquoi plusieurs opérateurs Or produisent des résultats inattendus

En Python, évaluer une expression impliquant plusieurs opérateurs ou peut être trompeur. Par exemple, considérons la ligne de code suivante :

if name == "Kevin" or "Jon" or "Inbar":
Copier après la connexion

Cette ligne vise à accorder l'accès aux utilisateurs non autorisés, mais en réalité, elle autorise tous les utilisateurs. Pour comprendre pourquoi, nous devons examiner le comportement de l'opérateur.

Le problème des ors multiples

En anglais, "or" relie plusieurs clauses, indiquant qu'au moins une doit être vrai. Cependant, en Python, une expression telle que « A ou B ou C » est analysée comme « (A ou B) ou C ». Cela signifie que seule la première expression est évaluée. Si c'est vrai, l'expression entière est vraie.

Solution 1 : plusieurs opérateurs d'égalité

Pour comparer correctement "nom" à chaque utilisateur autorisé, utilisez plusieurs opérateurs d'égalité :

if name == "Kevin" or name == "Jon" or name == "Inbar":
Copier après la connexion

Solution 2 : Définir l'adhésion

Une solution alternative consiste à utiliser un ensemble de noms autorisés et à vérifier l'adhésion :

authorized = {"Kevin", "Jon", "Inbar"}
if name in authorized:
Copier après la connexion

Solution 3 : N'importe quel opérateur

La fonction any() peut également être utilisée pour itérer sur les noms autorisés et renvoie True si l'un d'entre eux correspond "name":

authorized = ["Kevin", "Jon", "Inbar"]
if any(name == auth for auth in authorized):
Copier après la connexion

Performance

Parmi les trois solutions, l'adhésion définie offre la meilleure performance, suivie par plusieurs opérateurs d'égalité. Utiliser any() est le moins efficace.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal