• python枚举详解


    嗨喽,大家好呀~这里是爱看美女的茜茜呐


    👇 👇 👇 更多精彩机密、教程,尽在下方,赶紧点击了解吧~

    python源码、视频教程、插件安装教程、资料我都准备好了,直接在文末名片自取就可


    一. 枚举的定义

    首先,定义枚举要导入enum模块。

    枚举定义用class关键字,继承Enum类。

    用于定义枚举的class和定义类的class是有区别
      
    示例代码:

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

    代码分析:

    上面的代码,我们定义了颜色的枚举Color.

    颜色枚举有7个成员,分别是Color.red、Color.orange、Color.yellow等。

    每一个成员都有它们各自名称和值,Color.red成员的名称是:red,值是:1。

    每个成员的数据类型就是它所属的枚举。【*注:用class定义的类,实际上就是一种类型】

    1.1定义枚举时,成员名称不允许重复

    '''
    遇到问题没人解答?小编创建了一个Python学习交流QQ群:261823976
    寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
    '''
    from enum import Enum
    
    class Color(Enum):
        red = 1
        red = 2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

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

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

    from enum import Enum
    
    class Color(Enum):
        red = 1
        red_alias = 1
    
    • 1
    • 2
    • 3
    • 4
    • 5

    成员Color.red和Color.red_alias具有相同的值,

    那么成员Color.red_alias的名称red_alias就被视作成员Color.red名称red的别名。

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

    '''
    遇到问题没人解答?小编创建了一个Python学习交流QQ群:261823976
    寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
    ''''
    from enum import Enum
    
    class Color(Enum):
        red = 1
        red_alias = 1
    
    print(Color(1))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    输出结果为:Color.red

    1.4 如果要限制定义枚举时,不能定义相同值的成员。

    可以使用装饰器@unique【要导入unique模块】

    from enum import Enum, unique
    
    @unique
    class Color(Enum):
        red = 1
        red_alias = 1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

    二. 枚举取值

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

    Color[‘red’]
    
    • 1

    2.2 通过成员值来获取成员

    Color(2)
    
    • 1

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

    red_member = Color.red
    red_member.name
    red_member.value
    
    • 1
    • 2
    • 3

    三. 迭代器

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

    for color in Color:
        print(color)
    
    • 1
    • 2

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

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

    '''
    遇到问题没人解答?小编创建了一个Python学习交流QQ群:261823976
    寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
    '''
    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    输出结果是:

    Color.red、Color.orange、Color.yellow、Color.green、Color.blue、Color.indigo、Color.purple
    
    • 1

    但是Color.red_alias并没有出现在输出结果中。

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

    '''
    遇到问题没人解答?小编创建了一个Python学习交流QQ群:261823976
    寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
    '''
    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    输出结果:

    ('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>)
    
    • 1
    • 2
    • 3

    四. 枚举比较

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

    Color.red is Color.red
    
    • 1

    输出结果是:True

    Color.red is not Color.blue
    
    • 1

    输出结果是:True

    4.2 枚举成员可进等值比较

    Color.blue == Color.red
    
    • 1

    输出结果是:False

    Color.blue != Color.red
    
    • 1

    输出结果是:True

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

    Color.red < Color.blue
    
    • 1

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

    尾语

    感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

    希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

    躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

    最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇

  • 相关阅读:
    编程每日一练(多语言实现)基础篇:满足abcd=(ab+cd)^2的数 (增加Go语言实现)
    音视频编码格式-AAC ADT
    前端工程化知识系列(1)
    计算机基础协议/概念:推送数据— —WebSocket与SSE;前端Blob/URL下载文件
    35岁失业程序员的在线简历制作工具
    jQuery:jQuery笔记1
    Elasticsearch 分片内部原理—近实时搜索、持久化变更
    JMeter 安装教程(详细安装教程)
    Python测试之Pytest详解
    仿真1 - takeoff_land
  • 原文地址:https://blog.csdn.net/m0_72282564/article/details/132904282