Tengo una estructura if-elif-else con múltiples niveles, pero el último nivel else es siempre la misma declaración:

if statement1:
    if something:
        do_thing()
    elif something_else:
        if something_something:
            do_thing_something()
        elif somethingg:
            do_thingg()
        else:
            do_default()
    else:
        do_default()
else: 
    do_default()

Como puede ver, uso do_default() 3 veces, y siento que hay una mejor manera. Esto sería básicamente una default en una declaración switch-case en otros idiomas, pero Python no tiene switch-case. Me preguntaba si hay alguna otra manera de resolver esto con más elegancia / "Pitónicamente". O es la única forma de usar dictados o implementar mi propio switch-case ?

2
lte__ 3 oct. 2019 a las 16:16

3 respuestas

La mejor respuesta

Puede empaquetarlo en una función y escribirlo como en

def wrapper(args):
    if statement1:
        if something:
            return do_thing()
        elif something_else:
            if something_something:
                return do_thing_something()
           elif somethingg:
                return do_thingg()
    do_default()

Aunque tienes que escribir return varias veces

1
kuco 23 3 oct. 2019 a las 13:30

Tirar de este bloque a una función puede ayudar:

def do_things():
    if statement1:
        if something:
            return do_thing()
        elif something_else:
            if something_something:
                return do_thing_something()
            elif somethingg:
                return do_thingg()
    return do_default()
0
0x5453 3 oct. 2019 a las 13:30

Puede intentar anidar sus condicionales:

if statement1 and something:
    do_thing()
elif statement1 and something_else and something_something:
    do_thing()
elif statement1 and something_else and somethingg:
    do_thingg()
else:
    do_default()
5
Dani Mesejo 3 oct. 2019 a las 13:29
58220004