Per espandere la spiegazione di Blender un po 'più lontano, l'operatore or
ha qualcos'altro built-in:
<expression A> or <expression B>
Questo valuterà expression A
prima; se viene valutato su True
, l'operatore restituisce expression A
. Quindi 5 or <something>
restituirà 5
come 5
valutazioni a True
.
Se expression A
restituisce False
, viene restituito expression B
. Quindi 0 or 5
restituirà 5
perché 0
restituisce False
.
Naturalmente è possibile catena di questo tanto quanto si vuole:
<expr 1> or <expr 2> or <expr 3> or ... or <expr n>
In generale, or
restituirà il prima un'espressione che restituisce True
, ma mantenere il suo valore originale. Se non esiste alcuna espressione che restituisce True
, verrà semplicemente restituita l'ultima espressione (che restituisce False
).
L'operatore and
funziona in modo simile ma inverso. Restituisce l'espressione prima che viene valutata su False
, ma mantiene il suo valore originale. Se non esiste un'espressione che restituisce False
, verrà semplicemente restituita l'ultima espressione (che verrà valutata in True
).
Ad esempio, sia 0 and 5
e 5 and 0
tornerà 0
perché 0
viene valutato come False
, ma 2 and 3
tornerà 3
perché 3
è l'ultima espressione e tutto viene valutato come True
.
In qualsiasi modo (per tornare alla domanda): Tutte le espressioni vengono valutate da sinistra a destra e, se una regola dall'alto consente, ulteriori espressioni non verranno toccate.
Questo non ha nulla a che fare con l'ordine di valutazione di una dichiarazione 'if', ma con l'ordine di valutazione di un'espressione' o'. Ottieni esattamente le stesse regole per 'x = (pippo> 5 o bar> 6)', o, per giunta, solo 'pippo> 5 o bar> 6' come un'istruzione a parte. – abarnert
Prova a giocare e guarda cosa succede. Come quello che sarebbe il risultato di questo;) "se Vero o Falso e Falso e Falso o Falso:" –