Python3 新增加的数据类型:枚举 enum

简介: Python3 新增加的数据类型:枚举 enum

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']
目录
相关文章
|
6天前
|
Python
在Python中,布尔(Boolean)数据类型
【4月更文挑战第8天】Python中的布尔数据类型包含`True`和`False`,常用于控制程序流程,如`if`和`while`语句。示例展示了布尔值的赋值、条件判断及逻辑运算(`and`、`or`、`not`)。此外,Python能自动将其他数据类型(如0、空字符串、空列表等)转换为`False`,其余转为`True`,便于条件检查。
21 1
在Python中,布尔(Boolean)数据类型
|
6天前
|
Python
【Python操作基础】——数据类型
【Python操作基础】——数据类型
|
6天前
|
存储 Java Python
python变量、常量、数据类型
python变量、常量、数据类型
|
1天前
|
Python
2024年最新【Python】常见的 数据类型:整数类型,Python面试题整理最新
2024年最新【Python】常见的 数据类型:整数类型,Python面试题整理最新
2024年最新【Python】常见的 数据类型:整数类型,Python面试题整理最新
|
1天前
|
机器学习/深度学习 数据采集 数据挖掘
图解python 基础数据类型
图解python 基础数据类型
|
6天前
|
存储 Python
python字符串和字节明确数据类型
【5月更文挑战第6天】python字符串和字节明确数据类型
11 2
|
6天前
|
存储 程序员 Python
Python 数据类型转换详解
Python 数据类型转换详解
17 0
|
6天前
|
Python 容器
Python数据类型转换
Python数据类型转换
|
6天前
|
索引 Python
【Python21天学习挑战赛】集合 & 数据类型补充
【Python21天学习挑战赛】集合 & 数据类型补充
|
6天前
|
存储 JSON 运维
第三章 Python丰富的数据类型
第三章 Python丰富的数据类型