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