1

Есть код:

def Vybor(x):
    if x == 1:
        print("нечто")
        a()
    elif x == 2:
        print("что-то")
        b()
    elif x == 3:
        print("неизвестно что")
        с()

Возможно ли этот "код" (это просто пример типичного кода с ветвлением) сделать более "питонским", оптимизировать его (например, с использованием словарей и т. п.)?

Глеб
  • 2,512

3 Answers3

4

С версии python 3.10 возможно использовать match case конструкцию.

def select(x):
    match x:
        case 1:
            print("нечто")
        case 2:
            print('что-то')
        case 3:
            print('неизвестно что')
        case _:
            print('А такого мы не ожидали')

select(2)

вывод:

что-то

case _ используется, для любых других значений, не подходящих под паттерн.

Exord
  • 870
2
def vybor(x):
    options = {
        1: "нечто",
        2: "что-то", 
        3: "неизвестно что",
    }

    if x in options:
        print(options[x])
    else:
        print("Неправильный параметр.")

Примечание:

Я изменил имя функции Vybor на vybor, чтобы оно состояло только из строчных букв, в соответствии с PEP 8 - руководством по написанию кода на Python:

Имена функций

Имена функций должны состоять из маленьких букв, а слова разделяться символами подчеркивания — это необходимо, чтобы увеличить читабельность.

MarianD
  • 17,120
  • 1
    Если сделать обращение через get, возможно обработать случай, которого нет в словаре. Это будет аккуратнее - чем проверять вхождение ключа – Exord Aug 08 '23 at 09:56
  • @Exord - «Это будет аккуратнее...»: Я намеренно исключил этот вариант, чтобы мой ответ был понятен большему количеству людей. (Для таких, как вы, не будет проблемой изменить его таким образом, как вы рекомендуете.) – MarianD Aug 08 '23 at 10:32
  • Да, я понимаю. Я написал этот комментарий не в формате претензии к вашему ответу. А что бы указать что существует такая возможность :) – Exord Aug 08 '23 at 10:50
2

Дополню ответ @MarianD, и добавлю, как можно сделать ещё и вызов нужной функции:

def vybor(x):
    options = {
        1: ("нечто", a),  # значения теперь не строки, а кортежи вида (строка, функция)
        2: ("что-то", b),   # обратите внимание - скобки после имени функции ставить не нужно
        3: ("неизвестно что", c),
    }
option = options[x]
print(option[0])  # печатаем нужную строку
option[1]()  # вызываем нужную функцию

wchistow
  • 3,697
  • 6
  • 13
  • 32