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

Reply via email to