Рубрики
Без рубрики

Python Switch Case: 2 альтернативные реализации

Заявления о случаях переключателя Python могут быть реализованы с использованием словаря. Python не поддерживает операторы коммутатора. Мы должны использовать, если иначе, а не альтернативы

Автор оригинала: Pankaj Kumar.

Python Switch Case: 2 альтернативные реализации

Python не поддерживает операторы коммутатора. Было предложение для представления операторов дела Python Switch в Pep-3103 Но он был отклонен, потому что он не добавляет слишком много ценности.

Мы можем легко реализовать логику операторов коммутатора, используя операторы IF-else-Elif. Однако мы можем реализовать коммутатор, как поведение в Python, используя пользовательский код.

Реализация коммутатора в Python

Есть два способа реализации поведения коммутатора в Python.

  1. Использование словаря
  2. Динамическая функция

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'))
Реализация регистра выключателя Python

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. Итак, придерживайтесь простых старых утверждений, если и удерживайте свой код простым и легко читать.

Использованная литература: