General question about Python design goals

Duncan Booth duncan.booth at invalid.invalid
Mon Nov 28 07:57:33 EST 2005


Antoon Pardon wrote:

> So suppose I want a dictionary, where the keys are colours, represented
> as RGB triplets of integers from 0 to 255. A number of things can be
> checked by index-like methods.
> 
> e.g.
>   
>   def iswhite(col):
>     return col.count(255) == 3
> 
>   def primary(col):
>     return col.count(255) == 1 and col.count(0) == 2
> 
>   def secondary(col):
>     return col.count(255) == 2 and col.count(0) == 1

Just because you *can* implement these by treating your colour like a list 
doesn't make it a good idea. Treating them as opaque values makes these 
particular tests clearer:

def iswhite(col):
   return col==WHITE

def primary(col):
   return col in (RED,GREEN,BLUE)

def secondary(col):
   return col in (CYAN,MAGENTA,YELLOW)

If you relax your definition of primary to simply require that two planes 
are black then you may have a case where you want to treat the colour 
planes as a list, but if you convert it explicitly then you'll be better 
placed to keep the code working when someone decides to add an alpha 
channel or to switch the representation to CMYK.

def anyshadeprimary(col):
   return [col.red, col.green, col.blue].count(0)==2
   # or
   return col.toRGB().count(0)==2

So it looks to me as though you want col to be a type (which might be a 
subclass of tuple) but a list would be a mistake.



More information about the Python-list mailing list