Python - évaluation logique de commande dans l'instruction “if”
En Python on peut faire ceci:
if True or blah:
print("it's ok") # will be executed
if blah or True: # will raise a NameError
print("it's not ok")
class Blah:
pass
blah = Blah()
if blah or blah.notexist:
print("it's ok") # also will be executed
- Quelqu'un peut-il m'indiquer la documentation sur cette fonctionnalité?
- Est-il un détail de l'implémentation ou la fonctionnalité de la langue?
- Est-il bon style de codage pour exploiter cette fonctionnalité?
Le
C'est peut-être une chance?
uniquement si vous définissez
blah or True
on n'a pas de soulever une exception pour moi, il s'imprime.C'est peut-être une chance?
uniquement si vous définissez
blah
premier. Notez que blah
est ce n'est pas encore défini en haut de l'exemple, donc un NameError
est élevé.OriginalL'auteur Gill Bates | 2013-04-17
Vous devez vous connecter pour publier un commentaire.
La
or
etand
court-circuit, voir la Opérations booléennes documentation:Notez comment, pour
and
,y
est seulement évalué six
renvoie une valeur Vraie. Inversement, pouror
,y
n'est évaluée que six
évalué à une valeur Fausse.Pour la première expression
True or blah
, cela signifie queblah
n'est jamais évalué, puisque la première partie est déjàTrue
.En outre, personnalisé de votre
Blah
classe est considérée comme Vraie:Depuis votre classe n'implémente pas un
__nonzero__()
méthode (ni un__len__
méthode), il est considéré commeTrue
autant que les expressions booléennes sont concernés.Dans l'expression
blah or blah.notexist
,blah
est donc vrai, etblah.notexist
n'est jamais évaluée.Cette fonction est utilisée assez régulièrement et efficacement par des développeurs expérimentés, le plus souvent pour spécifier les paramètres par défaut:
Ne méfiez-vous de chaînage de ces et d'utiliser un expression conditionnelle à la place le cas échéant.
OriginalL'auteur Martijn Pieters
Cela s'appelle de court-circuit et est une caractéristique de la langue:
http://docs.python.org/2/tutorial/datastructures.html#more-on-conditions
OriginalL'auteur Pavel Anossov
C'est la façon dont les opérateurs logiques opérateurs, notamment
or
en python travail: de court-circuit de l'évaluation.Pour mieux l'expliquer, considérez les points suivants:
Pour plus d'informations, consultez la rubrique suivante:
OriginalL'auteur NlightNFotis
Avec le
or
de l'opérateur, les valeurs sont évaluées de gauche à droite. Une fois qu'une valeur est évaluée àTrue
, l'intégralité de la déclaration évalue àTrue
(donc plus les valeurs sont évaluées).OriginalL'auteur Kracit