2012-01-11 24 views
10

Me preguntaba por qué
True and []
vuelve [] en lugar de Falsosalida de True y []

es la expresión de un azúcar sintáctico?

+0

muy buena pregunta, nunca lo sé. Ya tengo planes de esta aplicabilidad en algunos aspectos de mi código donde la situación Verdadera habría necesitado devolver una lista vacía. Verá si la línea es False y [], devuelve falso. nice .. :) –

Respuesta

17

La respuesta se encuentra en 5.10. Boolean Expressions:

La expresión x and y primero evalúa x; si x es falso, se devuelve su valor; de lo contrario, se evalúa y y se devuelve el valor resultante.

2

Este azúcar sintáctica se utiliza a veces como un ternary operator en Python

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

Editar: Resulta que, según los comentarios :), este es un gran escollo en Python y debe ser sustituido por

someVar = valueIfTrue if condition else valueIfFalse 
+3

Tenga en cuenta que estos no son equivalentes, hay una gotcha en la versión de Python: Si 'valueIfTrue' se evalúa como' False', 'valueIfFalse' se devolverá si' someCondition' es 'True' o' False' . Use 'someVar = valueIfTrue if someCondition else valueIfFalse' para evitar este error. –

+0

No funciona si 'valueIfTrue' se evalúa como un valor False. Entonces es mejor usar 'valueIfTrue if someCondition else valueIfFalse' (desde 2.5). Por cierto: ¿El '? : 'originalmente proviene de C, no de C++. – glglgl

+1

1. No es azúcar sintáctico. Es solo ... sintaxis. (de lo contrario, ¿para qué sirve el azúcar?). 2. 'a y b o c' en Python está INCORRECTO. Podría evaluar 'c' cuando no quisiste hacerlo. – Celada