Archive for the ‘switch’ tag
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’а (что есть не очень), а вызвать некий обработчик в зависимости от значения переменной/выражения.


