详解Python枚举的定义与用法

 更新时间:2023年04月10日 09:42:11   作者:程序员老华  
这篇文章主要介绍了详解Python枚举的定义与用法,在Python中,枚举和我们在对象中定义的类变量时一样的,每一个类变量就是一个枚举项,需要的朋友可以参考下

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

  代码分析:

上面的代码,我们定义了颜色的枚举Color.颜色枚举有7个成员,分别是Color.red、Color.orange、Color.yellow等。每一个成员都有它们各自名称和值,Color.red成员的名称是:red,值是:1。每个成员的数据类型就是它所属的枚举。【*注:用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枚举的定义与用法的文章就介绍到这了,更多相关Python枚举定义内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 分享13个好用到起飞的Python技巧

    分享13个好用到起飞的Python技巧

    编程是有技巧的,能写的出程序的人很多,但能写的又快又好是有技巧的,下面这篇文章主要给大家介绍了13个好用到起飞的Python技巧,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2021-10-10
  • 使用Python的开发框架Brownie部署以太坊智能合约

    使用Python的开发框架Brownie部署以太坊智能合约

    在本文中,我们将使用Python部署智能合约。这篇文章可能是您走向智能合约和区块链开发的桥梁!
    2021-05-05
  • 使用Python+wxpy 找出微信里把你删除的好友实例

    使用Python+wxpy 找出微信里把你删除的好友实例

    今天小编就为大家分享一篇使用Python+wxpy 找出微信里把你删除的好友实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02
  • Python技巧之实现批量统一图片格式和尺寸

    Python技巧之实现批量统一图片格式和尺寸

    大家在工作的时候基本都会接触到很多的图片,有时为了不同的工作需求需要修改图片的尺寸或者大小。本文为大家整理了Python批量转换图片格式和统一图片尺寸,希望对大家有所帮助
    2023-05-05
  • python定时截屏实现

    python定时截屏实现

    这篇文章主要介绍了python定时截屏实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • python如何利用paramiko执行服务器命令

    python如何利用paramiko执行服务器命令

    这篇文章主要介绍了python如何利用paramiko执行服务器命令,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-11-11
  • PyTorch中的Subset类简介与应用示例代码

    PyTorch中的Subset类简介与应用示例代码

    在深度学习框架PyTorch中,torch.utils.data.Subset是一个非常有用的类,用于从一个较大的数据集中选择一个子集,本文将介绍Subset的概念、基本用法以及一些实际应用示例,感兴趣的朋友一起看看吧
    2024-08-08
  • 在Python3中使用asyncio库进行快速数据抓取的教程

    在Python3中使用asyncio库进行快速数据抓取的教程

    这篇文章主要介绍了在Python3中使用asyncio进行快速数据抓取,asyncio是一个异步IO库,运行效率较高,需要的朋友可以参考下
    2015-04-04
  • python 用 xlwings 库 生成图表的操作方法

    python 用 xlwings 库 生成图表的操作方法

    这篇文章主要介绍了python 用 xlwings 库 生成图表的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • Python中index()函数与find()函数的区别详解

    Python中index()函数与find()函数的区别详解

    这篇文章主要介绍了Python中index()函数与find()函数的区别详解,Python index()方法检测字符串中是否包含子字符串 str ,如果指定beg开始和end结束范围,则检查是否包含在指定范围内,需要的朋友可以参考下
    2023-08-08

最新评论