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']
目录
相关文章
|
4月前
|
测试技术 索引 Python
Python接口自动化测试框架(练习篇)-- 数据类型及控制流程(一)
本文提供了Python接口自动化测试中的编程练习,包括计算器、猜数字、猜拳和九九乘法表等经典问题,涵盖了数据类型、运算、循环、条件控制等基础知识的综合应用。
54 1
|
25天前
|
Python
Python 中一些常见的数据类型
Python 中一些常见的数据类型
78 8
|
1月前
|
Python
Python中不同数据类型之间如何进行转换?
Python中不同数据类型之间如何进行转换?
27 6
|
1月前
|
存储 开发者 Python
Python 的数据类型
Python 的数据类型
39 6
|
2月前
|
Python
【10月更文挑战第7天】「Mac上学Python 13」基础篇7 - 数据类型转换与NoneType详解
本篇将详细介绍Python中的常见数据类型转换方法以及 `NoneType` 的概念。包括如何在整数、浮点数、字符串等不同数据类型之间进行转换,并展示如何使用 `None` 进行初始赋值和处理特殊情况。通过本篇的学习,用户将深入理解如何处理不同类型的数据,并能够在代码中灵活使用 `None` 处理未赋值状态。
69 2
【10月更文挑战第7天】「Mac上学Python 13」基础篇7 - 数据类型转换与NoneType详解
|
1月前
|
机器学习/深度学习 存储 数据挖掘
Python 编程入门:理解变量、数据类型和基本运算
【10月更文挑战第43天】在编程的海洋中,Python是一艘易于驾驭的小船。本文将带你启航,探索Python编程的基础:变量的声明与使用、丰富的数据类型以及如何通过基本运算符来操作它们。我们将从浅显易懂的例子出发,逐步深入到代码示例,确保即使是零基础的读者也能跟上步伐。准备好了吗?让我们开始吧!
29 0
|
2月前
|
编译器 数据安全/隐私保护 Python
Python--基本数据类型
【10月更文挑战第4天】
|
2月前
|
存储 Python
python数据类型、debug工具(一)
python数据类型、debug工具(一)
|
2月前
|
Python
[oeasy]python036_数据类型有什么用_type_类型_int_str_查看帮助
本文回顾了Python中`ord()`和`chr()`函数的使用方法,强调了这两个函数互为逆运算:`ord()`通过字符找到对应的序号,`chr()`则通过序号找到对应的字符。文章详细解释了函数参数类型的重要性,即`ord()`需要字符串类型参数,而`chr()`需要整数类型参数。若参数类型错误,则会引发`TypeError`。此外,还介绍了如何使用`type()`函数查询参数类型,并通过示例展示了如何正确使用`ord()`和`chr()`进行转换。最后,强调了在函数调用时正确传递参数类型的重要性。
32 3
|
3月前
|
存储 Java C++
30天拿下Python之数据类型
30天拿下Python之数据类型
43 4