2012-01-11 12 views
10

Mi chiedevo perché
True and []
ritorna [] invece di Falseuscita di True e []

è l'espressione di una zucchero sintattico?

+0

ottima domanda, non l'ho mai saputo. Ho già piani di questa applicabilità in alcuni aspetti del mio codice in cui la situazione reale avrebbe dovuto restituire una lista vuota. Vedete se la linea è False e [], restituisce false. bello .. :) –

risposta

17

La risposta si trova in 5.10. Boolean Expressions:

L'espressione x and y valuta prima x; se x è falso, viene restituito il suo valore; altrimenti, y viene valutata e il valore risultante viene restituito.

2

Questo zucchero sintattico è talvolta usato come un ternary operator in Python

C++: someVar = someCondition ? valueIfTrue : valueIfFalse; 
Python: someVar = someCondition and valueIfTrue or valueIfFalse 

Edit: Si scopre, come da commenti :), questo è un importante trabocchetto in Python e dovrebbe essere sostituito da

someVar = valueIfTrue if condition else valueIfFalse 
+3

prega di notare che questi non sono equivalenti, c'è una Gotcha nella versione di Python: Se 'valueIfTrue' restituisce' false', 'valueIfFalse' sarà restituita se la' someCondition' è 'true' o' false' . Usa 'someVar = valueIfTrue if someCondition else valueIfFalse' per evitare questa trappola. –

+0

Non funziona se 'valueIfTrue' restituisce un valore False. Quindi è meglio usare 'valueIfTrue if someCondition else valueIfFalse' (dalla 2.5). A proposito: il '? : 'originariamente viene da C, non da C++. – glglgl

+1

1. Non è zucchero sintattico. È solo ... sintassi. (altrimenti: cos'è zucchero PER?). 2. 'a e b o c' in Python è SBAGLIATO. Potrebbe valutare 'c' quando non intendevi farlo. – Celada

Problemi correlati