One suggestion is to construct the dictionary first:
CHOICES = dict( NONE = 'No experience required', SAIL = 'Sailing experience, new to racing', RACE = 'General racing experience', GOOD = 'Experienced racer', ROCK = 'Rock star' ) def experience_text(self): try: return CHOICES[self] except: return "????" On 05/21/2012 07:37 AM, Roy Smith wrote:
I've got this code in a django app: CHOICES = [ ('NONE', 'No experience required'), ('SAIL', 'Sailing experience, new to racing'), ('RACE', 'General racing experience'), ('GOOD', 'Experienced racer'), ('ROCK', 'Rock star'), ] def experience_text(self): for code, text in self.CHOICES: if code == self.level: return text return "????" Calling experience_text("ROCK") should return "Rock star". Annoyingly, django handles this for you automatically inside a form, but if you also need it in your application code, you have to roll your own. The above code works, but it occurs to me that I could use the much shorter: def experience_text(self): return dict(CHOICES).get("self.level", "???") So, the question is, purely as a matter of readability, which would you find easier to understand when reading some new code? Assume the list of choices is short enough that the cost of building a temporary dict on each call is negligible. I'm just after style and readability here.
-- http://mail.python.org/mailman/listinfo/python-list