Switch statements again

Jack Diederich jack at performancedrivers.com
Thu Jan 16 00:03:47 CET 2003


On Wed, Jan 15, 2003 at 05:46:07PM -0500, Steven Scott wrote:
> I've been reading the claims about doing things a more elegant way in python
> when it comes to switch statements, using if-elif-else and/or dictionaries
> of function pointers.  the following can be done with if-elif-else (and
> that's how I did it), but it sure is ugly.  my question is simply "what's
> the best way to do this in python?"
> 
>     switch (calDayOfWeekMask)
>       {
> 	  <snip>
> 	
>       case MASK_SUNDAY:
> 		dayOfWeek--;		// and fall thru
>       case MASK_MONDAY:
> 		dayOfWeek--;		// and fall thru
>       case MASK_TUESDAY:
> 		dayOfWeek--;		// and fall thru
>       case MASK_WEDNESDAY:
> 		dayOfWeek--;		// and fall thru
>       case MASK_THURSDAY:
> 		dayOfWeek--;		// and fall thru
>       case MASK_FRIDAY:
> 		dayOfWeek--;		// and fall thru
>       case MASK_SATURDAY:
> 		if (calWeekNumber == LAST)
> 		  {
> 		    occurrence.setDay(occurrence.getDaysInMonth());
> 		    occurrence.addDays(- ((7 - dayOfWeek
> 					   + occurrence.getDayOfWeek()) %
> 7));
> 		  }
> 		else
> 		  {
> 		    occurrence.setDay(1 + ((calWeekNumber - 1) * 7));
> 		    occurrence.addDays((dayOfWeek + 7 -
> occurrence.getDayOfWeek()) % 7);
> 		  }
> 		break;
> 		
>       default:
> 		return FAIL;
>       }

Assume that the mask names are like SUN .. SAT below

# setup the masks offsets
val = 6
subtract = {}
for (day_mask) in (SUN, MON, TUE, WED, THU, FRI, SAT):
  subtract[day_mask] = val
  val -= 1

try:
  dayOfWeek -= subtract[calDayOfWeekMask]
  if (calWeekNumber == LAST):
    # do one thing
  else:
    # do your other thing
except (KeyError,), e:
  return FAIL


There might be a typo, but this is close to what you want.

You could also do something fancier to initialize such as
using a list comprehension or zip().  Comprehensions always
hurt readability (ALWAYS), and we don't need the speedup
here so we do it explicitly.

-jackdied

  








More information about the Python-list mailing list