A medida que el estado de otras respuestas, la versión de Python para esto es:
i if i < x else x
(por supuesto, para este ejemplo en particular, uno preferiría escribir min(i, x)
, ya que es más fácil en los ojos)
Sin embargo, esta sintaxis de expresión acaba de estar disponible en Python 2.5 (creo que fue alrededor de 2004). antes de eso, se utilizó el siguiente modismo, pero se debe tener cuidado ya que es propenso a errores:
i < x and i or x
- porque el operador lógico "y" realmente evalúa el último valor verdadero de su cadena, por lo tanto, si la expresión era verdadero, i < x and i
evalúa a i
- y el operador or
evalúa el primer valor verdadero en la cadena. En este caso, si i < x
fuera falso, también lo sería i< x and i
y el primer valor verdadero sería x
.
Es fácil ver cómo era propenso a errores esta construcción, ya que si el valor booleano de i
sería falso (por ejemplo si i == 0), devolvería x, incluso si i < x
es verdadero.
Yo mismo, en aquellos días, utilizado para escribir este constructo en su lugar:
(x, i) [i < x]
La expresión "i < x" ha un valor numérico de " 1 "(verdadero) o" 0 "(falso) y usé esta propiedad para que funcione como un índice de la tupla anterior. El problema con este enfoque era que siempre evaluaría ambas expresiones en la tupla, aunque usaría ony una de esas (si las expresiones donde la función llama a esto podría ser costosa, o incluso conflictiva)
Creo que se introdujo antes de 2.7 (¿era 2.5?). Funciona con seguridad en 2.6 pero no funciona en 2.4. De todos modos, +1. –
Tienes razón, esa era la versión 2.5. Gracias por la corrección. – real4x