Évaluer plusieurs variables dans une déclaration "if"?
Dire que j'ai un tas de variables qui sont soit True
ou False
. Je veux évaluer un ensemble de ces variables dans une instruction if pour voir si ils sont tous False
comme suit:
if var1, var2, var3, var4 == False:
# do stuff
Sauf que ça ne marche pas. Je sais que je peux le faire:
if var1 == False and var2 == False and var3 == False and var4 == False:
# do stuff
Mais c'est assez moche, surtout si ces si les déclarations vont se produire beaucoup de choses dans mon code. Est-il de toute façon que je peux faire cette évaluation avec un nettoyeur de syntaxe (comme le premier exemple)?
OriginalL'auteur Rauffle | 2012-02-29
Vous devez vous connecter pour publier un commentaire.
Vous devriez ne jamais tester une variable booléenne avec
== True
(ou== False
). Au lieu de cela, écrire:ou de l'utilisation
(et dans les problèmes liés à son cousin
all
):ou utiliser Python transitive comparaisons:
not any(...)
est le Pythonic façon de le faire pour le "tout Faux", etall(...)
est pour le "tout est Vrai".Bon, réponse complète.
any((var1, var2, var3, var4))
tous les moyens seront évalués peu importe si vous utilisiez cher fonctions serait assez inefficace et plutôt défait le but de tout et de court-circuitetc. sont toutes les variables, d'où la
var
. Si elles sont des appels de fonction, vous serait de provoquer autre chose.OriginalL'auteur
Comment à ce sujet:
ou:
Ils sont faciles à lire, car ils sont en anglais.
OriginalL'auteur
Que vous pouvez faire:
OriginalL'auteur
if all(not v for v in (var1, var2, var3, var4)):
C'est pour le "tout faux" de la branche. Pour "tout est vrai", il suffit de faire
if all((var2, var2, var3, var4)):
.if not any((var1, var2, var3, var4)):
Vous avez besoin de mettre les arguments en un objet iterable.
any
prend un seul argument.merci pour la correction
Pas nécessaire d'utiliser
not
, et il peut faire des erreurs plus facilement.OriginalL'auteur
À propos d'une fonction personnalisée?
Maintenant, vous pouvez l'utiliser
OriginalL'auteur
Que vous pouvez faire:
Mais, si les variables sont évaluées à true ou false, vous pouvez aussi faire ceci:
Ou
OriginalL'auteur
Utiliser le () mot-clé.
OriginalL'auteur
Vous pouvez utiliser
if var1 == var2 == var3 == False:
OriginalL'auteur