Я хочу написать функцию на Python, которая возвращает различные фиксированные значения на основе значения входного индекса.
В других языках я бы использовал оператор switch or case, но в Python, похоже, нет switch оператора. Какие решения Python рекомендуются в этом сценарии?
Переведено автоматически
Ответ 1
Python 3.10 (2021) представил оператор match-case, который обеспечивает первоклассную реализацию "switch" для Python. Например:
deff(x): match x: case 'a': return1 case 'b': return2 case _: return0# 0 is the default case if x is not found
Оператор match-case значительно более мощный, чем этот простой пример.
Если вам нужно поддерживать Python ≤ 3.9, используйте вместо этого словарь:
deff(x): return { 'a': 1, 'b': 2, }[x]
Ответ 2
Если вам нужны значения по умолчанию, вы могли бы использовать функцию dictionary get(key[, default]):
deff(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)
В дополнение к словарным методам (которые мне, кстати, очень нравятся), вы также можете использовать 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файлов, хотя функционально он к этому ближе.