美文网首页python
python中枚举的使用

python中枚举的使用

作者: wit92 | 来源:发表于2020-06-15 00:12 被阅读0次

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_枚举

    一、枚举 Enum类 Python中所有枚举类型都是enum模块下的Enum类的子类。 枚举中的标识最好全部使用大...

  • Python中枚举(enumerate)的使用

    Python提供了内置的enumerate函数,可以把各种迭代器包装成生成器,以便稍后产生输出值,这个生成器每次产...

  • python的枚举使用

    在开发项目的时候,我们经常要定义常量,在python中我们如何定义常量?答案:同样是枚举 Enum类在pytho...

  • Python 中愉快地使用 enum

    枚举类型,到底需要不需要? Python 2.x 中是没有原生的枚举类型的,可能有些人觉得这不算个事,他们使用类,...

  • Python与枚举

    前言 枚举是一个常见的数据类型。在Python中枚举却不是一个类型,而是一个类。简单粗暴! 使用 结果 很简单,很...

  • 如何为元组中每个元素命名,提高程序可读性

    普通做法: C语言实现: c: 采用宏定义枚举类型 python解决方案 使用标准库中collections.na...

  • python之枚举类型

    1 简介 枚举是在 Python3.4 添加的新功能。Python3.4 之前的版本可以使用,但是不能直接使用,使...

  • 2020-01-31 关于枚举与数据字典

    说说什么时候使用了枚举:框架中,使用了枚举类的注解,即数据持久化时使用注解,当参数为枚举时,存入库的信息为枚举上注...

  • SpringBoot 入门笔记(七)自定义枚举类型

    定义枚举类 在抛出异常中使用枚举类型 异常处理类中接受枚举类型

  • (10) python中的枚举

    在python中,枚举的本质是一个类,所有枚举类都是Enum的子类枚举值不能动态更改且标签唯一,标签唯一但是数值不...

网友评论

    本文标题:python中枚举的使用

    本文链接:https://www.haomeiwen.com/subject/hjjtxktx.html