[Python-Dev] Switch statement
Talin
talin at acm.org
Sun Jun 11 23:15:13 CEST 2006
Greg Ewing wrote:
> skip at pobox.com wrote:
>
>
>> switch raw_input("enter a, b or c: "):
>> case 'a':
>> print 'yay! an a!'
>> case 'b':
>> print 'yay! a b!'
>> case 'c':
>> print 'yay! a c!'
>> else:
>> print 'hey dummy! I said a, b or c!'
>
>
> Before accepting this, we could do with some debate about the
> syntax. It's not a priori clear that C-style switch/case is
> the best thing to adopt.
Since you don't have the 'fall-through' behavior of C, I would also
assume that you could associate more than one value with a case, i.e.:
case 'a', 'b', 'c':
...
It seems to me that the value of a 'switch' statement is that it is a
computed jump - that is, instead of having to iteratively test a bunch
of alternatives, you can directly jump to the code for a specific value.
I can see this being very useful for parser generators and state machine
code. At the moment, similar things can be done with hash tables of
functions, but those have a number of limitations, such as the fact that
they can't access local variables.
I don't have any specific syntax proposals, but I notice that the suite
that follows the switch statement is not a normal suite, but a
restricted one, and I am wondering if we could come up with a syntax
that avoids having a special suite.
Here's an (ugly) example, not meant as a serious proposal:
select (x) when 'a':
...
when 'b', 'c':
...
else:
...
The only real difference between this and an if-else chain is that the
compiler knows that all of the test expressions are constants and can be
hashed at compile time.
-- Talin
More information about the Python-Dev
mailing list