1. 枚举的定义

  1. 首先,定义枚举要导入enum模块。
  2. 枚举定义用class关键字,继承Enum类。
  3. 用于定义枚举的class和定义类的class是有区别【下一篇博文继续分享】。

  示例代码:

from enum import Enum
class Color(Enum):
red = 1
orange = 2
yellow = 3
green = 4
blue = 5
indigo = 6
purple = 7

  代码分析:

  1. 上面的代码,我们定义了颜色的枚举Color.
  2. 颜色枚举有7个成员,分别是Color.red、Color.orange、Color.yellow等。
  3. 每一个成员都有它们各自名称和值,Color.red成员的名称是:red,值是:1。
  4. 每个成员的数据类型就是它所属的枚举。【*注:用class定义的类,实际上就是一种类型】
1.1 定义枚举时,成员名称不允许重复   
from enum import Enum
class Color(Enum):
red = 1
red = 2

  上面的代码,就无法执行。提示错误:TypeError: Attempted to reuse key: 'red'

 1.2 默认情况下,不同的成员值允许相同。但是两个相同值的成员,第二个成员的名称被视作第一个成员的别名  

from enum import Enum
class Color(Enum):
red = 1
red_alias = 1

  成员Color.red和Color.red_alias具有相同的值,那么成员Color.red_alias的名称red_alias就被视作成员Color.red名称red的别名。

   1.3 如果枚举中存在相同值的成员,在通过值获取枚举成员时,只能获取到第一个成员

from enum import Enum
class Color(Enum):
red = 1
red_alias = 1 print(Color(1))

  输出结果为:Color.red

 1.4 如果要限制定义枚举时,不能定义相同值的成员。可以使用装饰器@unique【要导入unique模块】

from enum import Enum, unique

@unique
class Color(Enum):
red = 1
red_alias = 1

  再执行就会提示错误:ValueError: duplicate values found in <enum 'Color'>: red_alias -> red

2. 枚举取值 

 2.1 通过成员的名称来获取成员

Color['red']

 2.2 通过成员值来获取成员

Color(2)

 2.3 通过成员,来获取它的名称和值

red_member = Color.red
red_member.name
red_member.value

3. 迭代器

 3.1 枚举支持迭代器,可以遍历枚举成员

for color in Color:
print(color)

  输出结果是,枚举的所有成员。Color.red、Color.orange、Color.yellow、Color.green、Color.blue、Color.indigo、Color.purple。

 3.2 如果枚举有值重复的成员,循环遍历枚举时只获取值重复成员的第一个成员

from enum import Enum

class Color(Enum):
red = 1
orange = 2
yellow = 3
green = 4
blue = 5
indigo = 6
purple = 7
red_alias = 1 for color in Color:
print(color)

  输出结果是:Color.red、Color.orange、Color.yellow、Color.green、Color.blue、Color.indigo、Color.purple。但是Color.red_alias并没有出现在输出结果中。

 3.3 如果想把值重复的成员也遍历出来,要用枚举的一个特殊属性__members__

from enum import Enum

class Color(Enum):
red = 1
orange = 2
yellow = 3
green = 4
blue = 5
indigo = 6
purple = 7
red_alias = 1 for color in Color.__members__.items():
print(color)

  输出结果:('red', <Color.red: 1>)、('orange', <Color.orange: 2>)、('yellow', <Color.yellow: 3>)、('green', <Color.green: 4>)、('blue', <Color.blue: 5>)、

       ('indigo', <Color.indigo: 6>)、('purple', <Color.purple: 7>)、('red_alias', <Color.red: 1>)

4. 枚举比较

 4.1 枚举成员可进行同一性比较

Color.red is Color.red

  输出结果是:True

Color.red is not Color.blue

  输出结果是:True

 4.2 枚举成员可进等值比较

Color.blue == Color.red

  输出结果是:False

Color.blue != Color.red

  输出结果是:True

 4.3 枚举成员不能进行大小比较

Color.red < Color.blue

  输出结果出错:TypeError: unorderable types: Color() < Color()

最新文章

  1. Microsoft Visual Studio 2017 for Mac Preview 下载+安装+案例Demo
  2. sql基础查询
  3. Java核心技术卷二部分笔记
  4. 3.x的触摸响应机制
  5. UIWebView的使用,简单浏览器的实现
  6. 第16讲- UI组件之TextView
  7. Docker环境中部署OwnCloud 9.0
  8. PHP文本处理之中文汉字字符串转换为数组
  9. CentOS下SparkR安装部署:hadoop2.7.3+spark2.0.0+scale2.11.8+hive2.1.0
  10. 似是而非的JS - 异步调用可以转化为同步调用吗?
  11. Spring Boot中采用Mockito来mock所测试的类的依赖(避免加载spring bean,避免启动服务器)
  12. Hystrix 熔断机制原理
  13. Spring Cloud项目MVN编译 -- Non-resolvable import POM
  14. linux虚机配置开发/Server环境全集
  15. RSA加解密算法以及密钥格式
  16. SSH的使用
  17. Windows 10 Creators Update [ISO官方镜像][15063][1703][x64][x86][创意者更新正式版]
  18. python gevent自动挡的协程切换。
  19. 关于poi导出excel三种方式HSSFWorkbook,SXSSFWorkbook,csv的总结
  20. 前端 --- 4 js

热门文章

  1. android 移动网络实时抓包
  2. 常用的PHP框架
  3. 前端单页应用SEO解决方案
  4. A Simple Problem with Integers poj 3468 多树状数组解决区间修改问题。
  5. 关于URLEncoder的编码和URLDecode解码
  6. thinkphp 使用过程中遇到的一个小函数
  7. 多线程读写共享变量时,synchronized与volatile的作用
  8. Spring框架:Spring容器具体解释
  9. 08-使用for循环输出杨辉三角(循环)
  10. It&#39;s only too late if you decide it is. Get busy living, or get busy dying(转)
  11. 【git学习五】git基础之git分支
  12. C#获取网页内容 (WebClient、WebBrowser和HttpWebRequest/HttpWebResponse)
  13. 配置FindBugs和常见FindBugs错误
  14. Es6的用法
  15. 对于&quot;单链表逆置和递归&quot;的问题的理解.
  16. 安卓Q | 诸多本地文件找不到?应用文件存储空间沙箱化适配指导
  17. 6-9 天平 uva839
  18. Linux使用——Linux命令——Linux文件压缩和解压使用记录
  19. ZCU板级调试Bug记录
  20. 并发编程——ConcurrentHashMap#addCount() 分析