In welcher Reihenfolge wird eine if-Anweisung in Python ausgewertet?

8

Wenn Sie eine if-Anweisung haben, in der mehrere Variablen oder Funktionen ausgewertet werden, in welcher Reihenfolge werden sie ausgewertet?

%Vor%

In diesem speziellen Fall wird foo gegen die fünf und dann gegen die 6 (von links nach rechts) bewertet oder wird es von rechts nach links ausgewertet? Ich gehe davon aus, dass ein or und and in der gleichen Reihenfolge ausgewertet wird.

    
Mogget 24.04.2013, 20:16
quelle

5 Antworten

18

Die linke Klausel wird zuerst ausgewertet und dann die rechte Klausel, wenn die erste Klausel False ist.

Aus diesem Grund können Sie Dinge wie:

tun %Vor%

Ohne es zu brechen.

Umgekehrt wird mit einer and -Klausel die rechte Klausel nur ausgewertet, wenn die erste% code_% ist:

%Vor%

Andernfalls würde eine Ausnahme ausgelöst, wenn True ist person .

    
ubik 24.04.2013, 20:18
quelle
7

Es wird von links nach rechts ausgewertet.

%Vor%     
Nathan Villaescusa 24.04.2013 20:19
quelle
3

Um die Erklärung von Blender etwas weiter zu erweitern, hat der Operator or etwas anderes eingebaut:

%Vor%

Dies wird expression A zuerst auswerten; Wenn der Wert True lautet, wird expression A vom Operator zurückgegeben. So liefert 5 or <something> 5 als 5 ergibt True .

Wenn expression A zu False auswertet, wird expression B zurückgegeben. So wird 0 or 5 5 zurückgeben, weil 0 zu False auswertet.

Natürlich können Sie das beliebig verketten:

%Vor%

Im Allgemeinen gibt or den ersten Ausdruck zurück, der zu True ausgewertet wird, aber seinen ursprünglichen Wert behält. Wenn es keinen Ausdruck gibt, der True ergibt, gibt er einfach den letzten Ausdruck zurück (der zu False auswertet).

Der Operator and arbeitet ähnlich, aber umgekehrt. Es gibt den ersten Ausdruck zurück, der auf False auswertet, aber seinen ursprünglichen Wert behält. Wenn es keinen Ausdruck gibt, der False ergibt, gibt er einfach den letzten Ausdruck zurück (der auf True auswertet).

Als Beispiel geben sowohl 0 and 5 als auch 5 and 0 0 zurück, weil 0 zu False auswertet, aber 2 and 3 gibt 3 zurück, weil 3 der letzte Ausdruck ist und alles auswertet zu True .

In irgendeiner Weise (um auf die Frage zurückzukommen): Alle Ausdrücke werden von links nach rechts ausgewertet, und wenn eine Regel von oben dies erlaubt, werden weitere Ausdrücke nicht berührt.

    
poke 24.04.2013 21:02
quelle
1

Pythons Operator or schließt und es wird von links nach rechts ausgewertet:

%Vor%

Wenn foo > 5 , dann wird bar > 6 nicht einmal getestet, da True or <anything> True ist. Wenn foo nicht > 5 ist, wird bar > 6 getestet.

    
Blender 24.04.2013 20:21
quelle

Tags und Links