[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

AltStyle によって変換されたページ (->オリジナル) /