Mi chiedevo perché
True and []
ritorna [] invece di Falseuscita di True e []
è l'espressione di una zucchero sintattico?
Mi chiedevo perché
True and []
ritorna [] invece di Falseuscita di True e []
è l'espressione di una zucchero sintattico?
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.
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
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. –
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. 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
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 .. :) –