La simplificación para hacer el código más legible en Python es uno de los puntos fuertes del lenguaje. En esta ocasión podemos ver cómo simplificar un par de condiciones al momento de asignar valores a variables.

Caso 1: El return extra

Supongamos que tenemos una función que regresará un valor booleano (True, False). Podemos pasar de esto:


In [ ]:
def es_par(valor):
    """
    Retorna True si el valor ingresado es par, False en caso contrario.
    """
    if valor % 2 == 0
       return True
    return False

A algo como esto:


In [ ]:
def es_par(valor):
    """
    Retorna True si el valor ingresado es par, False en caso contrario.
    """
    return valor % 2 == 0

La explicación es bastante sencilla. Si tu valor a prueba va a retornar un boleano, no necesitas poner un bloque if, el mismo return hará la magia.

Caso 2: Dos if en uno

A veces el flujo de nuestra aplicación dependerá de algo más que una asignación; quizás un par, dependiendo de uno o dos factores. También podría ser simplicado. Supongamos que tenemos una función que podría regresar algún valor entero, o None y queremos que una variable sea igual a 0 en caso de que ésta sea None (y que por cuestiones de diseño no podemos cambiar esa función). Podemos pasar de esto:


In [1]:
import random
def aleatorio():
    """
    Función de prueba, regresará algunos números enteros, o None.
    """
    valores = (None, 1, 15, 23, 42)
    return random.choice(valores)

for _ in range(10):
    x = aleatorio()
    if x is None:
        print 0
    else:
        print x


42
42
42
0
0
23
42
42
23
0

Por algo como esto:


In [2]:
for _ in range(10):
    x = aleatorio()
    print x or 0


23
23
42
42
15
1
42
23
0
0

Caso 3: Asignación de variables con condiciones ternarias

La asignación de variables podría depender de algunos valores relacionados en alguna otra variable. Tomando por ejemplo la misma función que regresa una serie de enteros o None, quizás quisieramos asignar el valor de esa función al cuadrado, siempre y cuando no sea None:


In [3]:
for _ in range(10):
    x = aleatorio()
    if x is None:
        x2 = 'NaN'
    else:
        x2 = x **2
    print x2


1764
1764
1
529
1
NaN
225
225
1
1

Por algo más sencillo:


In [4]:
for _ in range(10):
    x = aleatorio()
    x2 = 'NaN' if x is None else x**2
    print x2


NaN
529
1764
1764
529
529
1
1
1764
1

Esta última operación es conocida como Expresiones Condicionales (Conditional Expressions), documentada en el PEP-0308 y está disponible a partir de Python 2.5.