Вопрос по python, case-statement, switch-statement – Что является эквивалентом Python для оператора case / switch? [Дубликат]

329

This question already has an answer here:

Replacements for switch statement in Python? 48 answers

Я хотел бы знать, есть ли Python-эквивалент для оператора case, такой как примеры, доступные на VB.net или C #?

Пожалуйста, не задавайте уже задаваемые и отвеченные вопросы. mgokhanbakal
Второй вопрос не является продолжением, и даже последующие мероприятия должны публиковаться как отдельные вопросы. В дополнение к этому, это не по теме, и должно идти на programmers.stackexchange.com. И твой первый вопрос дубликат. Lennart Regebro

Ваш Ответ

2   ответа
444

официальные документы рады, чтобы не предоставить переключатель, я виделрешение с использованием словарей.

Например:

# 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,
}

Затем вызывается эквивалентный блок переключателей:

options[num]()

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

кроме того, 2 - простое число
Относительно провала, вы не можете использоватьoptions.get(num, default)()или я не правильно понял?
Я думаю, что я имел в виду больше для случая, когда метка выполняет некоторый код, а затем переходит в блок для другой метки.
@IanMobbs Это почтиNEVER & Quot; собственно & Quot; затем поместить код в константную строку в кавычкиeval Это. 1) код не проверен вашим редактором на достоверность. 2) он не оптимизирован для байт-кода при компиляции. 3) вы не можете видеть подсветку синтаксиса. 4) неуклюже, если у вас есть несколько кавычек - ваш комментарий должен быть экранирован! Если вы хотите краткости, вы можете использоватьlambda вместо этого, хотя я думаю, что это считается непитоническим.
Словарь должен следовать за определениями функций
122

if/elif/else.

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

Похожие вопросы