C 语言中有枚举类型的,其定义如下:
enum cColor{ cBlack=0,cNavy,cGreen,cTeal,cMaroon,cPurple, cOlive, cSliver, cGray, cBlue,cLime, cCyan,cRed, cMagenta,cYellow,cWhite };
Python3.4之前的版本是没有枚举类型的,通常会用全局变量、字典等来代替。但枚举应该是常量,用变量代之可能会被一不小心变更了定值。之前也可能存在第三方库的enum模块。
现在python3.4版本后,enum已加入了标准库行列,导入方法: from enum import Enum
枚举用法:
本质是一个类,定义声明后都是 Enum 的子类。
>>> from enum import Enum >>> class COLOR(Enum): BLACK = 0 GRAY = 8 GREY = 8 BLUE = 9 RED = 12 WHITE = 16 >>> COLOR.BLACK <COLOR.BLACK: 0> >>> COLOR.GRAY <COLOR.GRAY: 8> >>> COLOR.GREY <COLOR.GRAY: 8> >>> COLOR.GREY.name 'GRAY' >>> COLOR.GREY.value 8 >>>
注: 枚举一般不允许有重复值,有重值也不会报错。如上例中,第二个值的枚举常量GREY只是作为前一个常量GRAY的别名使用。正常的遍历也读不到别名 GREY:
>>> [c.value for c in COLOR] [0, 8, 9, 12, 16] >>> [c.name for c in COLOR] ['BLACK', 'GRAY', 'BLUE', 'RED', 'WHITE'] >>>
Enum有个只读属性__member__,可以用它来遍历出别名 GREY:
>>> COLOR.__members__ mappingproxy({'BLACK': <COLOR.BLACK: 0>, 'GRAY': <COLOR.GRAY: 8>, 'GREY': <COLOR.GRAY: 8>, 'BLUE': <COLOR.BLUE: 9>, 'RED': <COLOR.RED: 12>, 'WHITE': <COLOR.WHITE: 16>}) >>> COLOR.__members__.items() dict_items([('BLACK', <COLOR.BLACK: 0>), ('GRAY', <COLOR.GRAY: 8>), ('GREY', <COLOR.GRAY: 8>), ('BLUE', <COLOR.BLUE: 9>), ('RED', <COLOR.RED: 12>), ('WHITE', <COLOR.WHITE: 16>)]) >>> COLOR.__members__.values() dict_values([<COLOR.BLACK: 0>, <COLOR.GRAY: 8>, <COLOR.GRAY: 8>, <COLOR.BLUE: 9>, <COLOR.RED: 12>, <COLOR.WHITE: 16>]) >>> COLOR.__members__.keys() dict_keys(['BLACK', 'GRAY', 'GREY', 'BLUE', 'RED', 'WHITE']) >>> [c for c in COLOR.__members__.keys()] ['BLACK', 'GRAY', 'GREY', 'BLUE', 'RED', 'WHITE']