Python - logischen Auswertung, um im "wenn" - Anweisung
In Python wir können dies tun:
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
- Kann jemand zeigen Sie mir die Dokumentation zu dieser Funktion?
- Ist es ein detail oder Merkmal der Sprache?
- Ist es guter Programmierstil, der zum ausnutzen dieser Funktion?
- Die
blah or True
man nicht, lösen Sie eine Ausnahme für mich, es druckt. - Vielleicht ist es ein Glück?
- nur, wenn Sie definieren
blah
ersten. Beachten Sie, dassblah
ist noch nicht definiert, auf die oben im Beispiel, so einNameError
angehoben wird, statt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
or
undand
Kurzschluss finden Sie in der Boolesche Operationen Dokumentation:Beachten Sie, wie, für
and
,y
ist nur bewerten, wennx
ergibt den Wert True. Umgekehrt, füror
,y
wird nur ausgewertet, wennx
ausgewertet, um einen False-Wert.Zum ersten Ausdruck
True or blah
bedeutet dies, dassblah
ist nie ausgewertet, da der erste Teil ist bereitsTrue
.Darüber hinaus können Sie Ihre benutzerdefinierten
Blah
Klasse wird als Wahr:Da Ihre Klasse nicht implementieren eine
__nonzero__()
Methode (noch ein__len__
- Methode), wird es alsTrue
soweit Boolesche Ausdrücke betroffen sind.In der expression
blah or blah.notexist
,blah
ist so wahr, undblah.notexist
wird nie ausgewertet.Diese Funktion wird verwendet, ziemlich regelmäßig und effektiv von erfahrenen Entwicklern, am häufigsten angeben, standardmäßig:
Tun, vorsichtig sein, die Verkettung dieser und verwenden Sie eine bedingten Ausdruck statt, wo anwendbar.
Dies ist die sogenannte short-circuiting und ist ein feature der Sprache:
http://docs.python.org/2/tutorial/datastructures.html#more-on-conditions
Es ist die Art, wie die Operatoren mit logischen Operatoren, speziell
or
in python arbeiten: Kurzschluss-Auswertung.Besser zu erklären, sollten Sie Folgendes beachten:
Weitere Informationen finden Sie im folgenden:
Mit der
or
Betreiber, die Werte sind von Links nach rechts ausgewertet. Nach einem Wert ausgewertetTrue
die gesamte Anweisung ausgewertetTrue
(also keine Werte mehr bewertet werden).