Автор оригинала: Pankaj Kumar.
Python Switch Case: 2 альтернативные реализации
Python не поддерживает операторы коммутатора. Было предложение для представления операторов дела Python Switch в Pep-3103 Но он был отклонен, потому что он не добавляет слишком много ценности.
Мы можем легко реализовать логику операторов коммутатора, используя операторы IF-else-Elif. Однако мы можем реализовать коммутатор, как поведение в Python, используя пользовательский код.
Реализация коммутатора в Python
Есть два способа реализации поведения коммутатора в Python.
- Использование словаря
- Динамическая функция
1. Реализация регистра выключателя Python с использованием словаря
Мы можем создать словарь, где ключ будет так, и значение будет результатом. Мы назовем метод словаря GET () с помощью значения по умолчанию для реализации сценария, когда нет соответствующего случая.
Допустим, у нас есть следующее, если-else Block.
print("Choices:\n 1 - Email\n 2 - SMS\n 3 - Push Notification") x = input("Please enter your choice:\n") x = int(x) if x is 1: print('sending email') elif x is 2: print('sending sms') elif x is 3: print('sending push notification') else: print('wrong choice')
Теперь мы хотим преобразовать его в поведение коммутатора, используя словарь.
print("Choices:\n 1 - Email\n 2 - SMS\n 3 - Push Notification") x = input("Please enter your choice:\n") x = int(x) choices_dict = {1: 'sending email', 2: 'sending sms', 3: 'sending push notification'} print(choices_dict.get(x, 'wrong choice'))
2. Внедрение коммутатора Python с динамическими функциями
Вышеуказанная реализация работает с простыми операторами печати. Но большую часть времени мы выполняем какой-то метод в блоках IF-ELS, а затем словарь не будет работать в качестве замены коммутатора.
Допустим, мы имеем следующее, если-царствуйте блок для выполнения некоторой операции на входном целым числе.
import math x = input("Please enter an integer:\n") x = int(x) print("Choices:\n 1 - Square\n 2 - Cube\n 3 - Square Root") choice = input("Please enter your choice:\n") choice = int(choice) if choice is 1: print(math.pow(x, 2)) elif choice is 2: print(math.pow(x, 3)) elif choice is 3: print(math.sqrt(x))
Мы можем создать динамический метод для реализации коммутатора, как поведение.
import math x = input("Please enter an integer:\n") x = int(x) print("Choices:\n 1 - Square\n 2 - Cube\n 3 - Square Root") choice = input("Please enter your choice:\n") choice = int(choice) def switch_func(value, i): return { 1: lambda val: math.pow(val, 2), 2: lambda val: math.pow(val, 3), 3: lambda val: math.sqrt(val), }.get(value)(i) print(switch_func(choice, x))
Здесь выбор сопоставлен с ключом словаря, и входное целое число отображается с функцией лямбда. Наконец, вывод функции Lambda возвращается из вызова Switch_func ().
Заключение
Приятно экспериментировать реализацию операторов коммутаторов. Но это очень запутанно, и мы не можем реализовать сложные сценарии с несколькими операторами в блоке IF-Evel. Итак, придерживайтесь простых старых утверждений, если и удерживайте свой код простым и легко читать.