Is enum iteration order guaranteed?

Ethan Furman ethan at stoneleaf.us
Tue Jan 10 00:55:10 EST 2017


On 01/09/2017 09:18 PM, Steven D'Aprano wrote:
> The docs say that enums can be iterated over, but it isn't clear to me whether
> they are iterated over in definition order or value order.
>> If I have:
>> class MarxBros(Enum):
> GROUCHO = 999
> CHICO = 5
> HARPO = 11
> ZEPPO = auto()
> GUMMO = -1
>> GROUCHO, CHICO, HARPO, ZEPPO, GUMMO = list(MarxBros)

In Python 3 it is always definition order. In Python 2 (using the enum34 [1] backport), the order is either by value if possible, or alphabetical if not -- unless you use the _order_ attribute to set it:
class MarkBros(Enum):
 _order_ = 'GROUCHO CHICO HARGPO ZEPPO GUMMO'
 GROUCHO = 999
 ...
> On that related note, how would people feel about a method that injects enums
> into the given namespace?
>> MarxBros._inject_(globals())
>> although maybe
>> from MarxBros import *
>> would be more familiar syntax :-)

Or you can do globals().update(MarxBros.__members__).
--
~Ethan~


More information about the Python-list mailing list

AltStyle によって変換されたページ (->オリジナル) /