Python - logische Bewertungsreihenfolge in "if" -Anweisung

7

In Python können wir dies tun:

%Vor%
  • Kann mir jemand auf eine Dokumentation zu dieser Funktion verweisen?
  • Ist es ein Implementierungsdetail oder ein Merkmal der Sprache?
  • Ist es ein guter Codierungsstil, diese Funktion auszunutzen?
Gill Bates 17.04.2013, 20:19
quelle

4 Antworten

21

Der or und and Kurzschluss finden Sie in der Boolesche Operationen Dokumentation:

  

Der Ausdruck x and y bewertet zuerst x ; Wenn x falsch ist, wird der Wert zurückgegeben. Andernfalls wird y ausgewertet und der resultierende Wert zurückgegeben.

     

Der Ausdruck x or y bewertet zuerst x ; Wenn x wahr ist, wird der Wert zurückgegeben. Andernfalls wird y ausgewertet und der resultierende Wert zurückgegeben.

Beachten Sie, wie für and , y nur ausgewertet wird, wenn x einen True-Wert ergibt. Umgekehrt wird für or , y nur ausgewertet, wenn x mit einem False-Wert ausgewertet wird.

Für den ersten Ausdruck True or blah bedeutet dies, dass blah niemals ausgewertet wird, da der erste Teil bereits True ist.

Außerdem wird Ihre benutzerdefinierte Blah -Klasse als True betrachtet:

  

Im Kontext boolescher Operationen und auch wenn Ausdrücke von Steuerflussanweisungen verwendet werden, werden die folgenden Werte als falsch interpretiert: False , None , numerische Null aller Typen und leere Strings und Container (einschließlich Strings, Tupel, Listen, Wörterbücher, Sets und frozensets). Alle anderen Werte werden als wahr interpretiert. (Eine Möglichkeit, dies zu ändern, finden Sie in der __nonzero__() speziellen Methode.)

Da Ihre Klasse keine __nonzero__() -Methode (noch eine __len__ -Methode) implementiert, wird sie als True betrachtet, soweit boolesche Ausdrücke betroffen sind.

Im Ausdruck blah or blah.notexist ist blah somit wahr und blah.notexist wird nie ausgewertet.

Diese Funktion wird von erfahrenen Entwicklern regelmäßig und effektiv verwendet, meistens um Standardwerte festzulegen:

%Vor%

Seien Sie vorsichtig bei der Verkettung und verwenden Sie stattdessen einen bedingten Ausdruck .

    
Martijn Pieters 17.04.2013, 20:21
quelle
5

Dies wird als Kurzschluss bezeichnet und ist ein Merkmal der Sprache:

Ссылка

  

Die Booleschen Operatoren and und or sind so genannte Kurzschlussoperatoren: Ihre Argumente werden von links nach rechts ausgewertet und die Auswertung stoppt, sobald das Ergebnis ermittelt wurde. Wenn beispielsweise A und C wahr sind, aber B falsch ist, wertet A und B und C den Ausdruck C nicht aus. Bei Verwendung als allgemeiner Wert und nicht als boolescher Wert ist der Rückgabewert eines Kurzschlussoperators der letzte evaluiertes Argument.

    
Pavel Anossov 17.04.2013 20:21
quelle
2

Es ist die Art, wie die Operatoren logische Operatoren, insbesondere or in Python, arbeiten: Kurzschlussauswertung.

Um es besser zu erklären, überlegen Sie Folgendes:

%Vor%

Weitere Informationen finden Sie unter:

NlightNFotis 17.04.2013 20:21
quelle
1

Mit dem Operator or werden Werte von links nach rechts ausgewertet. Nachdem ein Wert zu True ausgewertet wurde, wird die gesamte Anweisung als True ausgewertet (es werden also keine weiteren Werte ausgewertet).

  • Offizielle Dokumentation <> / li>
  • Es ist eine Eigenschaft der Sprache
  • Es ist nichts falsch daran, seine Funktionalität zu nutzen
Kracit 17.04.2013 21:52
quelle