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()

python枚举详解的更多相关文章

  1. Python Collections详解

    Python Collections详解 collections模块在内置数据结构(list.tuple.dict.set)的基础上,提供了几个额外的数据结构:ChainMap.Counter.deq ...

  2. Python闭包详解

    Python闭包详解 1 快速预览 以下是一段简单的闭包代码示例: def foo(): m=3 n=5 def bar(): a=4 return m+n+a return bar >> ...

  3. [转] Python Traceback详解

    追莫名其妙的bugs利器-mark- 转自:https://www.jianshu.com/p/a8cb5375171a   Python Traceback详解   刚接触Python的时候,简单的 ...

  4. python 数据类型详解

    python数据类型详解 参考网址:http://www.cnblogs.com/linjiqin/p/3608541.html 目录1.字符串2.布尔类型3.整数4.浮点数5.数字6.列表7.元组8 ...

  5. Python 递归函数 详解

    Python 递归函数 详解   在函数内调用当前函数本身的函数就是递归函数   下面是一个递归函数的实例: 第一次接触递归函数的人,都会被它调用本身而搞得晕头转向,而且看上面的函数调用,得到的结果会 ...

  6. python线程详解

    #线程状态 #线程同步(锁)#多线程的优势在于可以同时运行多个任务,至少感觉起来是这样,但是当线程需要共享数据时,可能存在数据不同步的问题. #threading模块#常用方法:'''threadin ...

  7. python数据类型详解(全面)

    python数据类型详解 目录1.字符串2.布尔类型3.整数4.浮点数5.数字6.列表7.元组8.字典9.日期 1.字符串1.1.如何在Python中使用字符串a.使用单引号(')用单引号括起来表示字 ...

  8. python生成器详解

    1. 生成器 利用迭代器(迭代器详解python迭代器详解),我们可以在每次迭代获取数据(通过next()方法)时按照特定的规律进行生成.但是我们在实现一个迭代器时,关于当前迭代到的状态需要我们自己记 ...

  9. 转 python数据类型详解

    python数据类型详解 目录 1.字符串 2.布尔类型 3.整数 4.浮点数 5.数字 6.列表 7.元组 8.字典 9.日期 1.字符串 1.1.如何在Python中使用字符串 a.使用单引号(' ...

随机推荐

  1. 我王某的 低错&&(女装)Flag

    日月共鉴,人心同睹. 喜欢你. 喜欢你的眼睛. 春天银河般闪烁的双瞳.春日阳光般温柔的眼神. 喜欢你的头发. 在微风中飘拂丝绢般柔滑的长发. 喜欢你的嘴唇. 给我甜蜜的吻.吐出忧伤叹息的嘴唇. 喜欢你 ...

  2. JS里面function和Function的区别

    js里Function 与 function的不一样的,不仅仅是大小写的问题. 简单点说:大写的Function是一个类 ,而小写的function是一个对象. Function是一个构造器,func ...

  3. 事件处理器v-on:(event)/@(event)

    <!DOCTYPE html> <html lang="zh"> <head> <title></title> < ...

  4. adb命令总结

  5. Redis高级命令的使用学习

  6. Link-Cut Tree(LCT)

    转载自LCT(Link-Cut Tree)详解(蒟蒻自留地) 如果你还没有接触过LCT,你可以先看一看这里: (看不懂没关系,先留个大概的印像)http://www.cnblogs.com/BLADE ...

  7. utils03_将本地仓库推送到gitHub的2种方式

    1.使用ssh连接方式 创建一个新的仓库 复制SSH 配置连接属性 完成推送 刷新hdhRepository2仓库 2.使用HTTPS连接方式 创建一个新的仓库 复制HTTPS 配置连接属性 第一次推 ...

  8. pycharm professional 2019版长效激活

    PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试.语法高亮.Project管理.代码跳转.智能提示.自动完成.单元测试.版本控制. ...

  9. GULP入门(一)

    1.首先要先装node.然后在命令行里安装全局的gulp: npm install --global gulp 这是gulp在的生成的位置 2.接下来,我们需要将gulp安装到项目本地 npm ins ...

  10. java 集合存储对象且根据对象属性排序

    方法一:根据java1.8lambda表达式进行排序 Comparator<RateInfo> comparator = (t1, t2) -> t1.getRateCode().c ...