Recherche…


Introduction

Les expressions conditionnelles, impliquant des mots-clés tels que if, elif et bien d'autres, permettent aux programmes Python d'effectuer différentes actions en fonction d'une condition booléenne: True ou False. Cette section traite de l'utilisation des conditions Python, de la logique booléenne et des instructions ternaires.

Syntaxe

  • <expression> if <conditionnel> else <expression> # Opérateur ternaire

si elif et autre

En Python, vous pouvez définir une série de conditions en utilisant if pour le premier, elif pour le reste, jusqu'au final (optionnel) else pour tout ce qui n'est pas pris par les autres conditionnelles.

number = 5

if number > 2:
    print("Number is bigger than 2.")
elif number < 2:  # Optional clause (you can have multiple elifs)
    print("Number is smaller than 2.")
else:  # Optional clause (you can only have one else)
    print("Number is 2.")

Le Number is bigger than 2 sorties Number is bigger than 2

Utiliser else if au lieu de elif déclenchera une erreur de syntaxe et n'est pas autorisé.

Expression conditionnelle (ou "l'opérateur ternaire")

L'opérateur ternaire est utilisé pour les expressions conditionnelles en ligne. Il est préférable de l'utiliser dans des opérations simples et concises, faciles à lire.

  • L'ordre des arguments est différent de beaucoup d'autres langages (tels que C, Ruby, Java, etc.), ce qui peut conduire à des bogues lorsque des personnes peu familiarisées avec le comportement "surprenant" de Python l'utilisent (elles peuvent inverser l'ordre).
  • Certains le trouvent "peu maniable", car cela va à l'encontre du flux normal de la pensée (penser d'abord à la condition et ensuite aux effets).
n = 5

"Greater than 2" if n > 2 else "Smaller than or equal to 2"
# Out: 'Greater than 2'

Le résultat de cette expression sera tel qu'il est lu en anglais - si l'expression conditionnelle est True, alors elle sera évaluée à l'expression du côté gauche, sinon du côté droit.

Les opérations de tenaire peuvent également être imbriquées, comme ici:

n = 5
"Hello" if n > 10 else "Goodbye" if n > 5 else "Good day"

Ils fournissent également une méthode pour inclure des conditions dans les fonctions lambda .

Si déclaration

if condition:
    body

Les instructions if vérifient la condition. S'il est évalué à True , il exécute le corps de l'instruction if . S'il est évalué à False , il saute le corps.

if True:
    print "It is true!"
>> It is true!

if False:
    print "This won't get printed.."

La condition peut être toute expression valide:

if 2 + 2 == 4:
    print "I know math!"
>> I know math!

Autre déclaration

if condition:
    body
else:
    body

L'instruction else n'exécutera son corps que si les instructions conditionnelles précédentes valent toutes False.

if True:
    print "It is true!"
else:
    print "This won't get printed.."

# Output: It is true!

if False:
    print "This won't get printed.."
else:
    print "It is false!"

# Output: It is false!

Expressions booléennes

Les expressions logiques booléennes, en plus d'évaluer True ou False , renvoient la valeur interprétée comme True ou False . C'est une manière pythonique de représenter une logique qui pourrait autrement nécessiter un test if-else.


Et opérateur

L'opérateur and évalue toutes les expressions et renvoie la dernière expression si toutes les expressions ont la valeur True . Sinon, il renvoie la première valeur évaluée à False :

>>> 1 and 2
2

>>> 1 and 0
0

>>> 1 and "Hello World"
"Hello World"

>>> "" and "Pancakes"
""

Ou opérateur

L'opérateur or évalue les expressions de gauche à droite et retourne la première valeur qui a la valeur True ou la dernière valeur (si aucune n'est True ).

>>> 1 or 2
1

>>> None or 1
1

>>> 0 or []
[]

Évaluation paresseuse

Lorsque vous utilisez cette approche, rappelez-vous que l'évaluation est paresseuse. Les expressions qui ne doivent pas être évaluées pour déterminer le résultat ne sont pas évaluées. Par exemple:

>>> def print_me():
        print('I am here!')
>>> 0 and print_me()
0

Dans l'exemple ci-dessus, print_me n'est jamais exécuté car Python peut déterminer que l'expression entière est False lorsqu'elle rencontre le 0 ( False ). Gardez cela à l'esprit si print_me doit être exécuté pour servir la logique de votre programme.


Test pour plusieurs conditions

Une erreur courante lors de la vérification de plusieurs conditions consiste à appliquer la logique de manière incorrecte.

Cet exemple essaie de vérifier si deux variables sont chacune supérieures à 2. L'instruction est évaluée comme suit - if (a) and (b > 2) . Cela produit un résultat inattendu car bool(a) évalué comme True lorsque a n'est pas nul.

>>> a = 1
>>> b = 6
>>> if a and b > 2:
...     print('yes')
... else:
...     print('no')
    
yes

Chaque variable doit être comparée séparément.

>>> if a > 2 and b > 2:
...     print('yes')
... else:
...     print('no')
        
no

Une autre erreur, similaire, est commise lors de la vérification d'une variable parmi plusieurs. L'énoncé dans cet exemple est évalué comme - if (a == 3) or (4) or (6) . Cela produit un résultat inattendu car bool(4) et bool(6) sont évalués à True

>>> a = 1
>>> if a == 3 or 4 or 6:
...     print('yes')
... else:
...     print('no')
       
yes

Encore une fois, chaque comparaison doit être faite séparément

>>> if a == 3 or a == 4 or a == 6:
...     print('yes')
... else:
...     print('no')
        
no

Utiliser l'opérateur in est la manière canonique d'écrire ceci.

>>> if a in (3, 4, 6):
...     print('yes')
... else:
...     print('no')
    
no

Valeurs de vérité

Les valeurs suivantes sont considérées comme fausses, en ce sens qu'elles sont évaluées à False lorsqu'elles sont appliquées à un opérateur booléen.

  • Aucun
  • Faux
  • 0 , ou toute valeur numérique équivalente à zéro, par exemple 0L , 0.0 , 0j
  • Séquences vides: '' , "" , () , []
  • Mappages vides: {}
  • Types définis par l'utilisateur où les méthodes __bool__ ou __len__ renvoient 0 ou False

Toutes les autres valeurs de Python sont évaluées à True .


Remarque: une erreur courante consiste à vérifier simplement la fausseté d'une opération qui renvoie des valeurs Falsey différentes lorsque la différence est importante. Par exemple, utiliser if foo() plutôt que le plus explicite if foo() is None

Utiliser la fonction cmp pour obtenir le résultat de la comparaison de deux objets

Python 2 inclut une fonction cmp qui vous permet de déterminer si un objet est inférieur, égal ou supérieur à un autre objet. Cette fonction peut être utilisée pour choisir un choix parmi une liste en fonction de l’une de ces trois options.

Supposons que vous ayez besoin d'imprimer 'greater than' si x > y , 'less than' si x < y et 'equal' si x == y .

['equal', 'greater than', 'less than', ][cmp(x,y)]

# x,y = 1,1 output: 'equal'
# x,y = 1,2 output: 'less than'
# x,y = 2,1 output: 'greater than'

cmp(x,y) renvoie les valeurs suivantes

Comparaison Résultat
x <y -1
x == y 0
x> y 1

Cette fonction est supprimée sur Python 3. Vous pouvez utiliser la cmp_to_key(func) assistance cmp_to_key(func) située dans functools dans Python 3 pour convertir les anciennes fonctions de comparaison en fonctions clés.

Évaluation des expressions conditionnelles à l'aide de listes de compréhension

Python vous permet de pirater les listes de compréhension pour évaluer les expressions conditionnelles.

Par exemple,

[value_false, value_true][<conditional-test>]

Exemple:

>> n = 16
>> print [10, 20][n <= 15]
10

Ici n<=15 renvoie False (ce qui équivaut à 0 en Python). Donc, ce que Python évalue est:

[10, 20][n <= 15]
==> [10, 20][False] 
==> [10, 20][0]     #False==0, True==1 (Check Boolean Equivalencies in Python)
==> 10
Python 2.x 2.7

La méthode intégrée __cmp__ renvoyé 3 valeurs possibles: 0, 1, -1, où cmp (x, y) a renvoyé 0: si les deux objectifs étaient identiques 1: x> y -1: x <y

Cela pourrait être utilisé avec des listes compréhensibles pour renvoyer le premier élément (c'est-à-dire index 0), le deuxième élément (ie index 1) et le dernier élément (ie index -1) de la liste. Nous donner un conditionnel de ce type:

[value_equals, value_greater, value_less][<conditional-test>]

Enfin, dans tous les exemples ci-dessus, Python évalue les deux branches avant d'en choisir une. Pour évaluer uniquement la branche choisie:

[lambda: value_false, lambda: value_true][<test>]()

où l'ajout de () à la fin garantit que les fonctions lambda ne sont appelées / évaluées qu'à la fin. Ainsi, nous n'évaluons que la branche choisie.

Exemple:

count = [lambda:0, lambda:N+1][count==N]()

Tester si un objet est Aucun et l'attribuer

Vous voudrez souvent attribuer quelque chose à un objet s'il est None , indiquant qu'il n'a pas été affecté. Nous utiliserons aDate .

La méthode la plus simple consiste à utiliser le test is None .

if aDate is None:
    aDate=datetime.date.today()

(Notez qu'il est plus pythonique de dire que is None au lieu de == None .)

Mais cela peut être légèrement optimisé en exploitant la notion que not None sera évalué à True dans une expression booléenne. Le code suivant est équivalent:

if not aDate:
    aDate=datetime.date.today()

Mais il y a une manière plus pythonique. Le code suivant est également équivalent:

aDate=aDate or datetime.date.today()

Cela fait une évaluation de court-circuit . Si aDate est initialisé et n'est not None , il se lui attribue sans effet net. S'il is None , le datetime.date.today() est assigné à aDate .



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow