Avoiding if..elsif statements

Fredrik Lundh fredrik at pythonware.com
Fri Aug 25 18:53:40 EDT 2006


"unexpected" <sumesh.chopra at gmail.com> wrote:

> I have a program where based on a specific value from a dictionary, I
> call a different function. Currently, I've implemented a bunch of
> if..elsif statements to do this, but it's gotten to be over 30 right
> now and has gotten rather tedious. Is there a more efficient way to do
> this?
>
> Code:
>
> value = self.dictionary.get(keyword)[0]
>
> if value == "something":
>     somethingClass.func()
> elsif value == "somethingElse":
>     somethingElseClass.func()
> elsif value == "anotherthing":
>     anotherthingClass.func()
> elsif value == "yetanotherthing":
>     yetanotherthingClass.func()
>
> Is it possible to store these function calls in a dictionary so that I
> could just call the dictionary value?

but of course (did you try it?).  here's an outline:

    dispatch = {
        "something": somethingClass.func, # note: no () here
        "somethingElse": somethingElseClass.func,
        "anotherthing": anotherthingClass.func,
        "yetanotherthing": yetanotherthingClass.func,
    }

    ...

    dispatch[value]() # note: do the call here!

or, a bit more robust:

    try:
        func = dispatch[value]
    except KeyError:
        print "- no handler for", value
    else:
        func()

tweak as necessary.

</F>






More information about the Python-list mailing list