2011-12-14 24 views
16

¿Existe una versión de Python de la siguiente if - declaración else en C++ o una declaración similar como esto:declaración del pitón de corta 'if-else'

int t = 0; 
    int m = t==0?100:5; 
+0

posible duplicado de [python? (condicional/ternario) operador para asignaciones] (http://stackoverflow.com/questions/3091316/python-conditional-ternary-operator-for-assignments) –

+0

posible duplicado de [Python Ternary Operator] (http: // stackoverflow. com/questions/394809/python-ternary-operator) – kay

Respuesta

38
m = 100 if t == 0 else 5 # Requires Python version >= 2.5 
m = (5, 100)[t == 0]  # Or [5, 7][t == 0] 

Tanto de las líneas anteriores dará lugar a la misma cosa.

La primera línea hace uso de la versión de Python de una "operador ternario" disponible desde la versión 2.5, aunque la documentación de Python refiere a él como Conditional Expressions.

La segunda línea es un pequeño programa para proporcionar funcionalidad en línea en muchos (todos los importantes formas equivalentes) a ?: se encuentran en muchos otros idiomas (como C y C++).


Documentación de Python - 5.11. Conditional Expressions

+0

Encuentro esta abreviatura "m = (5, 100) [t == 0]" un poco rara en términos de posicionamiento de valor, pero funciona aunque –

7
t = 0 
if t == 0: 
    m = 100 
else: 
    m = 5 

Bello es mejor que feo.
Explícito es mejor que implícito.
Simple es mejor que complejo.

De PEP 20.

O si realmente, realmente debe (funciona en Python> = 2.5):

t = 0 
m = 100 if t == 0 else 5 
+1

-1. El operador ternario es * mucho menos feo * que un proceso largo, si se trata de operaciones simples como esta, bastante explícito, y * modo * más simple. Dogma es feo. – naught101

13

La construcción se está refiriendo a se llama el ternary operator. Python tiene una versión de la misma (desde la versión 2.5), así:

x if a > b else y 
3

También hay:

m = t==0 and 100 or 5 

Dado que 0 es un valor Falsy, podríamos escribir:

m = t and 5 or 100 

Esto es equivalente a la primera .