2012-02-15 11 views
10

Qual è la spiegazione di questo comportamento in Python?Python "e" operatore con ints

a = 10 
b = 20 
a and b # 20 
b and a # 10 

a and b viene valutata a 20, mentre b and a viene valutata a 10. Sono interi positivi equivalente a Vero? Perché valuta il secondo valore? Perché è il secondo?

risposta

16

il documentation lo spiega molto bene:

L'espressione x and y prima valuta x; se x è falso, viene restituito il suo valore; in caso contrario, viene valutato e viene restituito il valore risultante.

E allo stesso modo per or che sarà probabilmente la prossima domanda sulle tue labbra.

L'espressione x or y prima valuta x; se x è true, viene restituito il suo valore; in caso contrario, viene valutato e viene restituito il valore risultante.

0

in python tutto ciò che non è None, 0, False, "", [],(), {} è vero

A e B è letta come True e vero in questo caso lo stesso per B e un

e sì, in questo caso prende il primo valore

edit: incompleto come nei commenti

+0

Con "prima" si fa significa "secondo"? –

+0

Non penso che sia "prendere" il primo valore. Penso che stia valutando il secondo valore nell'espressione. Qualcuno può indicarmi una risorsa che spieghi questo? (Grazie Dave!) –

+1

Questo non è giusto. '[]' è 'False', per esempio. La valutazione viene effettuata chiamando '__nonzero__' in Python 2 o' __bool__' in Python 3. – Dougal

4

Vedere il docs:

x and y  if x is false, then x, else y 

interi non nulli sono trattati come booleano vero, in modo da ottenere esattamente il comportamento descritto nella documentazione:

>>> a = 10 
>>> b = 20 
>>> a and b 
20 
>>> b and a 
10