Les opérateurs and
et or
sont court-circuit qui signifie que si le résultat de l'expression peut être déduite de la seule évaluation de la première l'opérande, le second n'est pas évalué. Par exemple si vous avez l'expression a or b
et a
évalue à vrai alors peu importe ce que b
est, le résultat de l'expression est vrai, donc b
n'est pas évalué. Ils travaillent en fait comme suit:
a and b
: Si un est Falsey, b n'est pas évaluée et est retourné, sinon b est retourné.
a or b
: Si a est vrai, b n'est pas évalué et a est retourné, sinon b est retourné. Falsey et truthy se réfèrent à des valeurs qui sont fausses ou vraies dans un contexte booléen.
Cependant cela et/ou idiome a été utile à l'époque où il n'y avait pas de meilleure alternative, mais maintenant il y a une meilleure façon:
spam if foo==bar else eggs
Le problème avec le et/ou idiome (en dehors de celui-ci être déroutant pour les débutants) est qu'il donne le mauvais résultat si la condition est vraie, mais le spam évalue à une valeur Falsey (par exemple la chaîne vide). Pour cette raison, vous devriez l'éviter.
'spam si foo == bar ou eggs' affiche une erreur de syntaxe dans python 2.6.5, mais 'spam si foo == bar else eggs' fonctionne comme prévu. – Zxaos
@Zxaos: Désolé à ce sujet. Il aurait dû être 'else' pas' ou'. Fixé maintenant –
Dans "le mauvais résultat ... si foo évalue à une valeur de falsey" vouliez-vous dire "le spam évalue à une valeur falsey"? – unutbu