case/switch statement?

Andrew Durdin adurdin at gmail.com
Mon Jun 20 00:17:25 EDT 2005


On 6/18/05, D H <d at e.f> wrote:
> I would hardly call using a
> dictionary as a switch statement, the "equivalent".  The fact that
> people use a dictionary as a conditional is a python wart.

Not at all. A case statement is nothing more than a literal mapping of
constant values to the execution of code blocks; a dictionary is a
(not necessarily literal) mapping of hashable (not just constant)
values to other values. A dictionary is a very close match for the
operation of a case statement.

In the common (in my experience) instance where the case statement is
like (using C notation):

switch(x) {
    case 1: y = foo; break;
    case 2: y = bar; break;
    case 3: y = baz; break;
    default: y = qux;
}

In this case the dictionary is obviously a better and clearer choice.
I've generally found for other circumstances where I've used switch
statements that the code ends up more readable if it's reorganised so
that the switch statements are all of the form above, or are
eliminated entirely--so I don't miss a switch/case statement in
Python.

And, just because we can, the most direct equivalent (in terms of
written code) of a switch/case statement in Python is:

exec {
    1:  "y = foo",
    2:  "y = bar",
    3:  "y = baz"
}.get(x,"y = qux")

But I didn't say it was nice...



More information about the Python-list mailing list