Pythonic способ «по умолчанию» условного высказывания? - PullRequest
2 голосов
/ 03 октября 2019

У меня есть структура if-elif-else с несколькими уровнями, но последний уровень else всегда один и тот же оператор:

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()

Как видите, я использую do_default() 3раз, и я чувствую, что есть лучший способ. По сути это будет оператор default в switch-case на других языках, но Python не имеет switch-case. Мне было интересно, есть ли другой способ решить эту проблему более элегантно / "Pythonically"? Или это единственный способ использовать диктовки или реализовать мои собственные switch-case?

Ответы [ 3 ]

5 голосов
/ 03 октября 2019

Вы можете попробовать отменить вложение ваших условий:

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()
1 голос
/ 03 октября 2019

Вы можете упаковать его в функцию и записать как в

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()

Хотя вам действительно нужно написать return несколько раз

0 голосов
/ 03 октября 2019

Вытягивание этого блока в функцию может помочь:

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()
...