NilColor

Guess what? You're on my site!

Archive for the ‘switch’ tag

Python: switch

with 2 comments

Простая ситуация: нужно вызвать одну из нескольких функций, в зависимости от некоторого параметра. Знакомо и просто:

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

Written by NilColor

January 14th, 2008 at 8:17 am

Posted in phyton

Tagged with ,