[Python-Dev] Switch statement (original) (raw)
skip at pobox.com skip at pobox.com
Mon Jun 12 00:36:11 CEST 2006
- Previous message: [Python-Dev] Switch statement
- Next message: [Python-Dev] Switch statement
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
talin> Since you don't have the 'fall-through' behavior of C, I would
talin> also assume that you could associate more than one value with a
talin> case, i.e.:
talin> case 'a', 'b', 'c':
talin> ...
As Andrew Koenig pointed out, that's not discussed in the PEP. Given the various examples though, I would have to assume the above is equivalent to
case ('a', 'b', 'c'):
...
since in all cases the PEP implies a single expression.
talin> It seems to me that the value of a 'switch' statement is that it
talin> is a computed jump - that is, instead of having to iteratively
talin> test a bunch of alternatives, you can directly jump to the code
talin> for a specific value.
I agree, but that of course limits the expressions to constants which can be evaluated at compile-time as I indicated in my previous mail. Also, as someone else pointed out, that probably prevents something like
START_TOKEN = '<'
END_TOKEN = '>'
...
switch expr:
case START_TOKEN:
...
case END_TOKEN:
...
The PEP states that the case clauses must accept constants, but the sample implementation allows arbitrary expressions. If we assume that the case expressions need not be constants, does that force the compiler to evaluate the case expressions in the order given in the file? To make my dumb example from yesterday even dumber:
def f():
switch raw_input("enter b, d or f:"):
case incr('a'):
print 'yay! a b!'
case incr('b'):
print 'yay! a d!'
case incr('c'):
print 'yay! an f!'
else:
print 'hey dummy! I said b, d or f!'
_n = 0
def incr(c):
global _n
try:
return chr(ord(c)+1+_n)
finally:
_n += 1
print _n
The cases must be evaluated in the order they are written for the example to work properly.
The tension between efficient run-time and Python's highly dynamic nature would seem to prevent the creation of a switch statement that will satisfy all demands.
Skip
- Previous message: [Python-Dev] Switch statement
- Next message: [Python-Dev] Switch statement
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]