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

Replacements for switch statement in Python?

Замены инструкции switch в Python?

Я хочу написать функцию на Python, которая возвращает различные фиксированные значения на основе значения входного индекса.

В других языках я бы использовал оператор switch or case, но в Python, похоже, нет switch оператора. Какие решения Python рекомендуются в этом сценарии?

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

Python 3.10 (2021) представил оператор match-case, который обеспечивает первоклассную реализацию "switch" для Python. Например:

def f(x):
match x:
case 'a':
return 1
case 'b':
return 2
case _:
return 0 # 0 is the default case if x is not found

Оператор match-case значительно более мощный, чем этот простой пример.


Если вам нужно поддерживать Python ≤ 3.9, используйте вместо этого словарь:

def f(x):
return {
'a': 1,
'b': 2,
}[x]
Ответ 2

Если вам нужны значения по умолчанию, вы могли бы использовать функцию dictionary get(key[, default]):

def f(x):
return {
'a': 1,
'b': 2
}.get(x, 9) # 9 will be returned default if x is not found
Ответ 3

Мне всегда нравилось делать это таким образом

result = {
'a': lambda x: x * 5,
'b': lambda x: x + 7,
'c': lambda x: x - 2
}[value](x)

Отсюда

Ответ 4

В дополнение к словарным методам (которые мне, кстати, очень нравятся), вы также можете использовать if-elif-else для получения функции switch/case/default:

if x == 'a':
# Do the thing
elif x == 'b':
# Do the other thing
if x in 'bc':
# Fall-through by not using elif, but now the default case includes case 'a'!
elif x in 'xyz':
# Do yet another thing
else:
# Do the default

Это, конечно, не идентично switch / case - у вас не может быть сбоя так же легко, как отказ от оператора break, но у вас может быть более сложный тест. Его форматирование приятнее, чем ряд вложенных ifфайлов, хотя функционально он к этому ближе.

2023-07-04 06:23 python