Вопрос-Ответ

What is the Python equivalent for a case/switch statement? [duplicate]

Какой эквивалент Python для оператора case / switch?

Существует ли эквивалент Python для оператора switch?

Переведено автоматически
Ответ 1

Python 3.10 и выше

В Python 3.10 они ввели сопоставление с шаблоном.

Пример из документации по Python:

def http_error(status):
match status:
case 400:
return "Bad request"
case 404:
return "Not found"
case 418:
return "I'm a teapot"

# If an exact match is not confirmed, this last case will be used if provided
case _:
return "Something's wrong with the internet"

До Python 3.10

Хотя официальная документация этого не предоставляет switch, я видел решение с использованием словарей.

Например:

# define the function blocks
def zero():
print "You typed zero.\n"

def sqr():
print "n is a perfect square\n"

def even():
print "n is an even number\n"

def prime():
print "n is a prime number\n"

# map the inputs to the function blocks
options = {0 : zero,
1 : sqr,
4 : sqr,
9 : sqr,
2 : even,
3 : prime,
5 : prime,
7 : prime,
}

Затем вызывается эквивалентный switch блок:

options[num]()

Это начинает разваливаться, если вы сильно зависите от fall through .

Ответ 2

Прямой заменой является if/elif/else .

Однако во многих случаях есть лучшие способы сделать это в Python. Смотрите "Замены инструкции switch в Python?".

2023-12-31 20:58 python