Python: switch
Простая ситуация: нужно вызвать одну из нескольких функций, в зависимости от некоторого параметра. Знакомо и просто:
switch (x) {
case '1':
//bla-bla-bla;
break;
default:
//default bla-bla-bla;
}
Поехали… Хм, не тут то было… Оказалось, что у Python’а нет switch/case конструкции (ну да, я пользую питон не так давно ;) ). В PEP 275 даже подробно рассказано почему. И предлагается использовать последовательности if..elif. Ну можно конечно и так – но как-то не красиво. И вот после некоторого чесания затылка, нашлось красивое решение — по крайней мере мне оно таковым кажется:
observers = {'start': tocis_svc.startJob,
'finish': tocis_svc.finishJob,
'pause': tocis_svc.pauseJob}
try:
observer = observers[request.GET['action']]
except KeyError:
return HttpResponse("{succes:false,error:'Таких манипуляций над работами не проводится. Извините.'}")
И пожалуй, это даже более красиво чем switch..case. По крайней мере в том случае, если вам нужно не написать много кода внутри case’а (что есть не очень), а вызвать некий обработчик в зависимости от значения переменной/выражения.



А если требуется
switch (x) { case 1,3,5: //bla-bla-bla; break; default: //default bla-bla-bla; }
Alexey
25 Jun 08 at 15:35
Ну что приходит в голову сразу:
или, если не нравится try…except блок, обернуть это в функцию, где проверять ключ на его наличие явно:
if observers.has_key(event): ...NilColor
25 Jun 08 at 17:05