枚举

枚举类型可以看作是一种标签或是一系列常量的集合,通常用于表示某些特定的有限集合,例如星期、月份、状态等。

Python 的原生类型(Built-in types)里并没有专门的枚举类型,但是我们可以通过很多方法来实现它,例如字典、类等:

python编程

上面两种方法可以看做是简单的枚举类型的实现。

如果只在局部范围内用到了这样的枚举变量是没有问题的。

但问题在于它们都是可变的(mutable),也就是说可以在其它地方被修改从而影响其正常使用:

python编程

通过类定义的枚举甚至可以实例化,变得不伦不类:

python编程

当然也可以使用不可变类型(immutable),例如元组,但是这样就失去了枚举类型的本意,将标签退化为无意义的变量:

python编程

为了提供更好的解决方案,Python 通过 PEP 435 在 3.4 版本中添加了 enum 标准库,3.4 之前的版本也可以通过 pip install enum 下载兼容支持的库。

enum 提供了 Enum/IntEnum/unique 三个工具,用法也非常简单,可以通过继承 Enum/IntEnum 定义枚举类型,其中 IntEnum 限定枚举成员必须为(或可以转化为)整数类型,而 unique 方法可以作为修饰器限定枚举成员的值不可重复:

python编程

python编程

更有趣的是 Enum 的成员均为单例(Singleton),并且不可实例化,不可更改:

python编程

虽然不可实例化,但可以将枚举成员赋值给变量:

python编程

也可以进行比较判断:

python编程

最后一点,由于枚举成员本身也是枚举类型,因此也可以通过枚举成员找到其它成员:

python编程

但是要谨慎使用这一特性,因为可能与成员原有的命名空间中的名称相冲突:

python编程

总结:

enum 模块的用法很简单,功能也很明确,但是其实现方式却非常值得学习。如果你想更深入了解更多 Python 中关于 Class 和 Metaclass 的黑魔法,又不知道如何入手,那么不妨阅读一下 enum 的源码。

后台私信我:腾讯架构资源,获取腾讯架构师整理的大数据学习资源

java 枚举类型enum用法_别再说Python没有枚举类型了,好好看看相关推荐

  1. java枚举类型enum用法_深入理解java枚举类型enum用法

    enum 的全称为 enumeraTIon, 是 JDK 1.5 中引入的新特性,存放在 java.lang 包中. 下面是我在使用 enum 过程中的一些经验和总结. 原始的接口定义常量 publi ...

  2. java的枚举类型是什么_什么是枚举(java枚举类型enum用法)

    最佳回答 枚举 1.枚举 (enumeration) 值类型的一种特殊形式,它从 System.Enum 继承,并为基础基元类型的值提供备用名称.枚举类型有名称.基础类型和一组字段.基础类型. &qu ...

  3. 枚举类型enum用法赋值

    枚举常量是一种枚举类型中的值,及枚举值,枚举类型是由用户自定义的,只用用户在程序中定义它才能被使用.创建一个枚举类型的基本语法: enum 枚举类型名{ 枚举值1,枚举值2,- } 枚举类型名是由用户 ...

  4. c枚举类型enum例题_c枚举类型enum用法 枚举类型enum用法 怎么去取所有

    JUDGE(S W ) 指 W 属于 S 枚举类型还是自定义函数里的2个变量不要太久太久不联系我,我怕我一不小心把你忘了. (1) 枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素 ...

  5. c枚举类型enum例题_一篇文章让你详细了解Java中Enum枚举类的使用

    文章前记 程序员工作久了便可能整日忙碌于"增删改查"中,迷失方向,毫无进步. 该公众号致力于分享软件开发相关的原创干货,助你完成从程序员到架构师的进阶之路! 努力!做一个NB的Co ...

  6. java枚举类型enum用法_java枚举类型enum用法和原理介绍【传智播客】

    Enum枚举类型 Enum的全写是Enumeration,这个词的翻译是列举.逐条陈述.细目.在程序语言中,枚举类型是一种特殊的数据类型(常用的数据类型比如字符串.整型),这种数据类型的变量值限定在固 ...

  7. java枚举类型enum用法_Java枚举类型——Enum的简单用法

    枚举类型是Java1.5的新特性,是指由一组固定的常量组成合法的类型.Java中由关键字enum来定义一个枚举类型.我们可以使用枚举来取代用public final static修饰的一批相关数据.如 ...

  8. 枚举类型enum用法_Java枚举深度解读,看这篇就够了

    作者 | 涛GuoGuo的跟屁虫丶博Ke 来源 | urlify.cn/aaamQf 66套java从入门到精通实战课程分享 Java枚举 1.枚举类概念的理解与定义 一个类的对象是有限个,确定的,我 ...

  9. c语言枚举类型enum用法参数,C语言枚举类型(Enum)

    在实际编程中,有些数据的取值往往是有限的,只能是非常少量的整数,并且最好为每个值都取一个名字,以方便在后续代码中使用,比如一个星期只有七天,一年只有十二个月,一个班每周有六门课程等. 以每周七天为例, ...

最新文章

  1. 类与类之间的交互关系
  2. iOS开发——XML/JSON数据解析
  3. Kubuntu中thunderbird最小化到任务栏
  4. boost::callable_traits的is_reference_member的测试程序
  5. spark中stage的划分与宽依赖/窄依赖(转载+自己理解/整理)
  6. 多线程百度网盘爬虫Python完整源码
  7. esxi 5.5运行linux拯救模式,启用Esxi 5.5 SSH 功能
  8. 【英语学习】【WOTD】encroach 释义/词源/示例
  9. mysql 安装绑定my.ini
  10. Dictionary Union and Sort by value
  11. java 文件上传到服务器_Java上传文件到服务器端的方法
  12. 在线作图|2分钟在线绘制三维PCOA图
  13. 搜狗微信公众号文章反爬虫完美攻克
  14. win7误删文件怎么恢复?
  15. 线性代数学习之特征值与特征向量
  16. tga格式转化为jpg格式
  17. 文本纠错--CRASpell模型
  18. 三菱触摸屏通讯错误_三菱触摸屏插上通讯线直接黑屏,老司机手把手教你解决触摸屏黑屏...
  19. 在 Windows 安装期间将 MBR 磁盘转换为 GPT 磁盘
  20. 入耳式降噪蓝牙耳机哪款好用?主动降噪耳机排行榜10强!

热门文章

  1. SAP Spartacus B2B页面Budget页面的设计原理
  2. 一个失败的SAP Spartacus路由修改尝试 -在CmsPageGuard的开头触发 OCC API 调用
  3. SAP Spartacus checkout Shipping address的页面实现
  4. 微信开发系列之五 - 将SAP UI5应用嵌入到微信中
  5. 给你的ABAP对象打上标签(Tag)
  6. 关于SAP ABAP字符变量和字符串变量字符个数的一个知识点,和一个血案
  7. why I need register Apache CXF as servlet
  8. SAP Fiori refreshSecurityToken
  9. My Appointment编辑场景下的roundtrip
  10. 关于SAP Commerce product API对description字段的处理