Tricks to do "enums"?

David Goodger dgoodger at bigfoot.com
Mon May 8 04:53:49 CEST 2000


on 2000-05-07 21:27, Courageous (jkraska1 at san.rr.com) wrote:
> So, I've been doing module level enums like this:
> 
> ##  My module
> 
> VAL1=0
> VAL2=1
> VAL3=3
> 
> While this works, and gives me great namespace protection
> (individuals using my "enum" prefix it with the module name),
> I'm wondering if there's any trick that will produce these
> without requiring me to renumber them? I'm getting tired
> of typing in new numbers for them if I decide to reorder
> them or insert elements...

Well, if you really meant VAL3=2 (ie, 0, 1, 2, ...; without gaps, a
continuous sequence), then you can do this:

    (VAL1,
     VAL2,
     VAL3) = range(3)

This also has the advantage of visually grouping the variables. They don't
have to start at 0 either; see the docs for the range() built-in function.
If your enumeration's values were some other function, you could use map():

   (TWO0,
    TWO1,
    TWO2,
    TWO3) = map(lambda i: 2**i, range(4))

This would give you the values [1, 2, 4, 8], useful for bitwise operations.

If the variable names were so regular, you could use eval() inside a loop,
constructing Python statement strings. Of course, if the variable names are
that regular, you might as well use an array...

-- 
David Goodger    dgoodger at bigfoot.com    Open-source projects:
 - The Go Tools Project: http://gotools.sourceforge.net
 (more to come!)




More information about the Python-list mailing list