HOWTO · Python
if not Déclaration en Python
Ce tutoriel montre l'utilisation de l'instruction if not en Python
Sur cette page
En Python, la syntaxe if not exécute un bloc lorsque l’expression qui suit not est fausse. Utilisez-la pour exprimer clairement une condition négative, par exemple pour vérifier qu’un seuil n’a pas été atteint, qu’un indicateur est faux ou qu’une collection ne contient aucun élément. Le corps du bloc suit les règles habituelles d’indentation d’une instruction if.
Ce que signifie if not en Python
not est un opérateur booléen : il inverse la valeur de vérité de l’expression qui le suit. Python évalue les comparaisons avant not. Ainsi, if not x > 10: signifie « si x > 10 est faux ». Cette expression équivaut à if not (x > 10):. Cela ne signifie pas que if a, en général, un opposé. Les parenthèses peuvent clarifier le groupement voulu, surtout dans une condition longue.
Exécutez cet exemple. Le message affiché reste en anglais.
x = 5
if not x > 10:
print("x is not greater than 10")
Ici, x > 10 est faux lorsque x = 5; not rend donc la condition vraie et Python entre dans le bloc indenté. Si x était supérieur à 10, la condition serait fausse et le bloc ne serait pas exécuté.
Utiliser if not avec des comparaisons et des valeurs booléennes
Vous pouvez nier directement une comparaison, comme ci-dessus, ou tester une variable booléenne. Par exemple, if not is_logged_in: entre dans le bloc lorsque is_logged_in vaut False. Cette forme est souvent plus claire qu’une comparaison explicite avec == False; choisissez un nom de variable qui exprime son sens afin que la condition se lise naturellement.
Une comparaison peut aussi être formulée positivement avec un autre opérateur. Par exemple, not (x == 10) et x != 10 expriment le même test pour des valeurs numériques ordinaires. Choisissez la forme qui rend l’exigence la plus facile à comprendre. Gardez les parenthèses lorsqu’elles aident à distinguer l’expression niée des autres conditions.
Vérifier si une collection est vide
Les conteneurs intégrés, comme les listes, les tuples, les dictionnaires et les ensembles, sont considérés comme faux dans une condition lorsqu’ils ne contiennent aucun élément. Ainsi, if not items: permet de traiter simplement une collection vide. Un conteneur non vide est considéré comme vrai, même si certains de ses éléments sont eux-mêmes des valeurs fausses. Parmi les autres valeurs couramment considérées comme fausses figurent False, None, zéro et les chaînes vides. Les objets personnalisés peuvent définir leur propre valeur de vérité : ne supposez donc pas que tous les objets se comportent comme des conteneurs.
Le message affiché par cet exemple reste en anglais.
items = []
if not items:
print("The list is empty.")
Ce test permet au programme de suivre le chemin prévu pour une liste vide avant de la traiter. À lui seul, il ne sécurise pas un accès ultérieur par index : le code doit toujours éviter de consulter un élément qui n’existe pas.
Vérifier qu’un élément est absent d’une collection
Pour vérifier l’absence d’une valeur, utilisez l’opérateur d’appartenance not in de Python. Cette forme exprime l’intention plus directement que de placer not devant un test d’appartenance. Par exemple, if 4 not in numbers: exécute le bloc uniquement si 4 ne figure pas parmi les éléments de numbers. Le groupement équivalent if not (4 in numbers): est valide, mais not in est la forme idiomatique.
Le message affiché par cet exemple reste en anglais.
numbers = [1, 2, 3]
if 4 not in numbers:
print("4 is missing")
Les tests d’appartenance sont utiles avec les listes, les chaînes, les ensembles et les clés de dictionnaire. Pour un dictionnaire, item in mapping vérifie les clés; il ne recherche pas dans les valeurs.
Combiner if not avec d’autres conditions
Associez un test nié à and lorsque toutes les conditions doivent être vraies, ou à or lorsqu’au moins une doit l’être. Python évalue not avant and et or; utilisez des parenthèses pour clarifier une logique plus complexe. Examinez la condition dans son ensemble en tenant compte des états requis : nier deux conditions séparées par and ne revient pas à nier leur expression combinée.
Les messages affichés par cet exemple restent en anglais.
is_logged_in = False
is_admin = False
if not is_logged_in and not is_admin:
print("Access denied. Please log in.")
else:
print("Continue")
Dans cet exemple, les deux conditions niées sont vraies, donc le premier bloc est sélectionné. Si l’un des indicateurs est vrai, la condition composée avec and est fausse et le bloc else s’exécute. Une branche else traite l’autre résultat possible de la condition; elle ne change pas la façon dont not évalue son expression.