On 6/20/06, Phillip J. Eby <[EMAIL PROTECTED]> wrote: > At 12:26 PM 6/21/2006 +1200, Greg Ewing wrote: > >Guido van Rossum wrote: > > > > > But it would be easy enough to define a dict-filling function that > > > updates only new values. > > > >Or evaluate the case expressions in reverse order. > > -1; stepping through the code in a debugger is going to be weird enough, > what with the case statements being executed at function definition time, > without the reverse order stuff.
Agreed. > I'd rather make it an error to list the > same value more than once; we can just check if the key is present before > defining that value. That makes sense too. I was thinking of a use case where you'd have a couple of sets of cases that need the same treatment per set (sre_compile.py has a few of these) but one of the sets has an exception. With the if/elif style you could write this as if x is exception: ...exceptional case... elif x in set1: ...case for set1... elif x in set2: ..case for set2... etc. But the prospect of something like this passing without error: switch x: case 1: ...case 1... case 1: ...another case 1?!?!... makes me think that it's better to simply reject overlapping cases. BTW I think the several-sets use case above is important and would like to have syntax for it. Earlier it was proposed to allow saying case 1, 2, 3: ...executed if x==1 or x==2 or x==3... but now that we're agreed to evaluate the expression at function definition time, I want to support case S: ...executed if x in S... but that would be ambiguous. So, thinking aloud, here are a few possibilities: case A: ... if x == A... cases S: ...if x in A... or perhaps (saving a keyword): case A: ... if x == A... case in S: ...if x in A... This would also let us write cases for ranges: case in range(10): ...if x in range(10)... I propose that the expression used for a single-value should not allow commas, so that one is forced to write case (1, 2): ...if x == (1, 2)... if you really want a case to be a tuple value, but you should be able to write case in 1, 2: ...if x in (1, 2)... since this really doesn't pose the same kind of ambiguity. If you forget the 'in' it's a syntax error. Hm, so this still doesn't help if you write case S: ... (where S is an immutable set or sequence) when you meant case in S: ... so I'm not sure if it's worth the subtleties. Time for bed here, -- --Guido van Rossum (home page: http://www.python.org/~guido/) _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com