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":
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":
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:
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):
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!