python枚举之Enum模块详解

2023-10-27

简介:

当我们需要定义一些特定有限数量的常量、标签、类型等的时候,最佳方式就是使用枚举。枚举一般用于表示某些特定的有限集合。例如月份、季节、星期等。

本篇主要介绍python2.7中的枚举类。即enum中的Enum类。python3.4开始有内置枚举类,在python2.7中需要指定enum34安装。

enum中有Enum和IntEnum两个枚举class。IntEnum的最大特性就是指定枚举值只能是int类型。

安装:
pip install enum34
# 注意这里是enum34,会安装和python3.4中相同的枚举类
# 如果直接执行pip install enum,会安装另外一个enum模块,也支持枚举,但是功能较少。
用法 定义:
# *******************************定义
from enum import Enum, unique
# 这行unique装饰器可以让枚举类中不能有重复值
# @unique
class ColorEnum(Enum):
	RED = "red"
	GREEN = "green"
	BLUE = "blue"
	# PINK = "red"
	# 这里如果加上了unique装饰器,运行时会报错duplicate names
	# 没加装饰器,可以设置相同属性。但是PINK会被当作RED的别名,即 ColorEnum.PINK
取值
# ********************************* 取值 
print ColorEnum.RED
# 输出 ColorEnum.RED, 注意这里无法输出值

print ColoeEnum.RED.value
# 输出 “red” value表示枚举的值

print ColorEnum.RED.names
# 输出 RED  name表示输出枚举变量
使用
# 一般用于表示特定有限集合值,常量集合,避免多处定义,避免重复值
内置属性
print ColorEnum._member_names_
# 输出 ['Monday', 'TuesDay', 'WednesDay'] 即全部枚举变量的列表

print ColorEnum._value2member_map_
# 输出 {1: <EnumWeek.Monday: 1>, 2: <EnumWeek.TuesDay: 2>, 3: <EnumWeek.WednesDay: 3>}
# 这是一个字典,字典键是枚举值,值是枚举变量
# 通过这两个内置属性可以轻易获取全部枚举值和变量

print ColorEnum.__members__.items()
# 得到全部枚举值
遍历
# 遍历
for v in ColorEnum:
	print v.name
	print v.value
比较
print ColorEnum.RED == ColorEnum.GREEN
# 输出false 比较运算,可以比较枚举值是否相等

print ColorEnum.RED is EnumColor.PINK
# PINK未注释时,输出True, 比较枚举值是否是同一个 

# 不支持大小比较
特性:
  • 可以遍历
  • 可以用 == 或者 is 比较
  • 获取全部枚举变量 参照上边语法
  • 获取全部枚举变量和值。参照上面语法
  • 装饰器unique可以决定是否能有重复值。(实际上重复枚举值无意义,后面重复值是前面枚举变量的别名,引用时只会指向第一个)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python枚举之Enum模块详解 的相关文章

  • 比较 TCP 校验和与 Scapy?

    我试图在使用 Scapy 作为嗅探器时识别校验和不正确的数据包 我可以通过访问获得原始校验和 packet TCP chksum 然后我使用删除它 del packet TCP chksum 我想做类似的事情 if originalChec
  • lxml 中的通配符命名空间

    如何使用 xpath 忽略 xml 命名空间进行查询 我正在使用 python lxml 库 我尝试了以下解决方案this https stackoverflow com questions 13463871 xpath selecting
  • 自 1.4.0 版本以来,sphinx_rtd_theme 不再是硬依赖项

    C Users Administrator Desktop item code serv documents api gt 制作 html 运行 Sphinx v1 6 2 加载腌制环境 失败 无法获取属性 WarningStream
  • 字符串的“相关矩阵”。名义数据的相似度

    这是我的数据框 df store 1 store 2 store 3 store 4 0 banana banana plum banana 1 orange tangerine pear orange 2 apple pear melon
  • Python:合并嵌套列表

    初学者在这里 我有 2 个要合并的嵌套列表 list1 a b c d e f g h list2 p q r s t u v w 我正在寻找的输出是 list3 a p q b c r s d e t f g h u v w 这可以在没有
  • Bokeh 相当于 matplotlib 子图

    我正在寻找一种方法来创建包含多个子图的绘图 例如 fig ax0 ax1 plt subplots nrows 2 sharex True 可以在 matplotlib 中完成 然后可以通过以下方式解决ax0 and ax1 有没有办法在
  • Pythonic方式逐行读取文件?

    以下两种方法中逐行读取文件的 Pythonic 方法是什么 with open file r as f for line in f print line or with open file r as f for line in f read
  • 如何在Python中打印出字母表中的第n个字母?

    ASCII 数学似乎在 Python 中不起作用 一 5 不起作用 如果没有字母数组 如何快速打印出字母表中的第 n 个字母 我天真的解决方案是这样的 letters A B C D E F G H I J K L M N O P Q R
  • 抓取多个帐户,即多次登录

    我可以成功抓取单个帐户的数据 我想在一个网站上抓取多个帐户 这意味着多次登录 如何管理登录 注销 您可以在每个帐户会话中使用多个 cookiejar 并行抓取多个帐户 请参阅 cookiejar 请求元密钥http doc scrapy o
  • 读取 JSON 文件并将其漂亮打印到另一个文件

    我有一个复杂 嵌套 的 json 文本文件 它是文本文件中的一长行 有什么方法可以读取文件 在 python 中 并将 json 缩进 漂亮地打印到新的文本文件中吗 使用读取文件json load 并使用json dump 在指定缩进值时将
  • 如何开始使用“scipy”

    我之前安装过 Python 3 4 2 和 3 5 2 在这两种情况下 我都可以在 Idle 中涉足编写和测试代码 这给了我两个窗口 一个用于代码的 运行 窗口 一个用于交互和测试的 Shell 窗口 输出 抱歉 不确定术语是否正确 现在我
  • 当有效的 django 表单保存在数据库中时如何触发自定义 python 代码

    Django 新手 我创建了一个简单的表单如下this https www youtube com watch v 3XOS UpJirU教程 我的表单正确地将数据保存在我的 Postgres 连接的本地数据库中 我想知道 每当将有效表单保
  • PySide2/QML 填充 Gridview 模型/委托并为其设置动画

    我是 QML 的新手 正在寻求以下几点帮助 如何基于 TextField 输入 如 Regex 通过 PySide2 过滤 Gridview 模型中的 QAbstractListModel 数据 标题 如何在鼠标悬停时为 Gridview
  • Pytest 插件:覆盖 pytest_runtest_call 和朋友

    我正在为我的一个项目使用 pytest 开发一个测试套件 由于项目的性质 我需要创建一个 Pytest 插件来控制测试的运行方式 它们不是在本地运行 而是发送到不同的进程来运行 我知道关于xdist但我认为这并不能解决我的问题 我一直在通过
  • 为什么 Python 的 argparse 对 SystemExit 使用错误代码 2?

    当我给 Python 的 argparse 输入它不喜欢的输入时 它会引发一个代码为 2 的 SystemExit 其中似乎意味着 没有这样的文件或目录 https docs python org 2 library errno html
  • PyCharm 可以列出项目中的所有 Python 错误吗?

    我在虚拟环境中使用 python 2 7 和 PyCharm 2 7 2013 年 2 月 7 日的新版本 每当我打开其中有明确错误的Python文件 相当于其他语言中的编译错误 例如使用未声明的变量 调用不存在的函数 时 它会在文件的装订
  • 在 python 中将数组作为参数传递

    我是Python新手 现在我需要声明大小为 20 的数组并将该数组传递给函数 需要数组的函数如下 function args The args是一个输入function 谁能帮我 如何在 python 中传递数组 当你说 数组 时 我假设你
  • 如何使用 np.newaxis?

    What is numpy newaxis https numpy org doc stable reference constants html numpy newaxis我什么时候应该使用它 在一维数组上使用它x产生 gt gt gt
  • mpld3图,注释问题

    我正在使用 mpld3 在 Intranet 网站上显示图形 我正在使用将图形保存到字典并使用 mpld3 js 在客户端渲染它的选项 除非我想使用注释 否则该图呈现良好 这些显然是抵消的 我不明白为什么 因为即使我将偏移量设置为 0 0
  • 设置restrict_xpaths设置后出现UnicodeEncodeError

    我是 python 和 scrapy 的新手 将restrict xpaths 设置设置为 table class lista 后 我收到了以下回溯 奇怪的是 通过使用其他 xpath 规则 爬虫可以正常工作 Traceback most

随机推荐

  • java.io.IOException: Connection reset by peer问题解决

    java io IOException Connection reset by peer问题解决 今天检查日志 发现 ClientAbortException java io IOException Connection reset by
  • font-spider(字蛛)的正确打开方式

    前言 最近在部署vue项目之后 在打开网页的时候 ttf文件下载时间实在是太久了 在经过合理的运用搜索引擎之后 可能自己的固化思维消化不了大佬们给出的方案 于是在他们的基础之上做了一些小小的改动 便叙文记之 1 引入font spider的
  • BigDecimal 前端丢失精度的问题解决

    问题描述 后端数字是85 00 但是前端显示85 SQL语句 select cast 字段 as decimal 10 2 value 这里已经保留两位小数了 from table where 实体类 这里是关键 注意不是 JSONFiel
  • java 的JDBC操作

    JDBC java数据库连接 提供了一套数据库操作标准 这些标准需要各个数据库厂商去实现并提供一个驱动程序 目前常见的4类JDBC驱动程序 JDBC ODBC 直接利用微软的ODBC进行数据库连接操作 性能低 一般不推荐 JDBC本地驱动
  • 前端笔记

    发布在github的笔记 下载慢 所以我放到csdn上面了 源地址 https github com overcomputer JavaScript 源地址 关注 大佬发布在github的笔记 下载慢 所以我放到csdn上面了 源地址 ht
  • Android HandlerThread 总结使用

    前言 以前我在 Android Handler Loop 的简单使用 介绍了子线程和子线程之间的通信 很明显的一点就是 我们要在子线程中调用Looper prepare 为一个线程开启一个消息循环 默认情况下Android中新诞生的线程是没
  • 一招教你学会使用AD更改PCB板子尺寸

    使用原理图生成PCB后 Altium Designer会根据原理图大小自动生成一块黑色区域 还有一个在禁止布线层的方框 还有两段标注板子大小的线 下面说一下如何更改黑色区域的大小 还有如何精确确定板子尺寸 比如使其为长宽都为整数 1 调整
  • 【浙工商期末报告】研一R语言期末作业(源代码分享)

    目录 研一R语言期末作业 源代码分享 一 作业回顾 1 1 计算t值 1 2 绘图 二 结果展示 2 1 计算t值 2 2 绘图 三 源代码分享 一 作业回顾 1 1 计算t值 1 2 绘图 二 结果展示 2 1 计算t值 1 1 9379
  • 【Flutter 2-9】Flutter手把手教程UI布局和Widget——弹性布局控件Flexible

    作者 弗拉德 来源 弗拉德 公众号 fulade me Flexible Flexible可以帮助Row Column Flex的子控件充满父控件 它的用法很灵活 也具有权重的属性 跟Flexible相类似的控件还有Expanded 先来看
  • MVC模式和三层架构

    MVC模式和三层架构 MVC 模式和三层架构是一些理论的知识 将来我们使用了它们进行代码开发会让我们代码维护性和扩展性更好 MVC模式 MVC是一种分层开发的模式 其中 M Model 业务模型 处理业务 V View 视图 界面展示 C
  • vscode软件打开失败(闪退)---兼容性问题

    1 右击vscode 选择 兼容性疑难解答 2 选择 尝试建议的设置 3 测试程序 4 vscode自动打开 问题解决 5 关闭vscode 6 下一步即可
  • 香橙派 Orangepi Zero2配置网络SSH登录

    1 命令扫描周围的WIFI热点 nmcli dev wifi 2 接入网络命令 nmcli dev wifi connect WIFI名称 password WIFI密码 用ifconfig获取IP地址 3 选择SSH登录 4 输入密码后就
  • 关于应用spdlog日志库的一些学习心得

    前后从小白到勉强能够使用spdlog日志库前后就几天时间吧 到现在有时间好好静下来反思一下学习步骤 想想哪一步还能再继续改进 刚入手时 看到的代码都是以往的学长们动过的 代码阅读难度大 基本上是缺失太多的东西了 后面才发现可以从GitHub
  • 【野火】瑞萨RA MCU创意氛围赛+基于瑞萨单片机的环境温湿度监测装置

    野火 瑞萨RA MCU创意氛围赛 基于瑞萨单片机的环境温湿度监测装置 1 设计简介 2 硬件设计 2 1主控板 2 2DHT11温湿度采集模块 2 3SPI屏幕 3 软件设计 4 效果展示 5 部分代码 功能 1 通过DHT11温湿度模块采
  • MySQL更新语句执行过程

    首先要提到的是MySQL更新语句的执行过程 同样也遵守查询数据查询的流程 MySQL体系结构和数据查询的执行过程 与查询流程不一样的是 更新流程还涉及重要的日志模块 MySQL日志之二进制日志binlog MySQL日志之重做日志redo
  • HBuilder创建App并打包发布

    如今 各式的代码编辑器层出不穷 一门语言的使用就会产生多个编辑器 就以前端而言 前端代码的编辑目前小编就熟悉了四款 Sublime WebStorm HBuilder HBuilderX 曾经小编以为 HBuilder只是前端的代码编辑工具
  • 软件开发人员应有的思维方式

    在我很小的时候 曾梦想着哪一天能成为世界知名人士 能够为这个社会贡献自己的力量 曾看到黑白电视机上有关对计算机的强大功能的介绍 那时的我心中已点燃了致力于计算机应用事业的火花 虽然计算机在当时中国的农村还只是一个传说 高中毕业 我义无反顾地
  • shell编程100例

    版权声明 本文为博主原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接和本声明 本文链接 https blog csdn net yugemengjing article details 82469785
  • intel至强服务器芯片制程,神器地位再巩固 !Intel 至强E3-1230/1220 V5测试

    2015年8月Intel正式发布了新一代微架构Skylake来替代当下的Broadwell 新一代的Skylake 是英特尔第六代微处理器架构 最主要的特征便是采用14纳米制程以及支持DDR4内存 Intel每一代处理器家族中都有一系列被中
  • python枚举之Enum模块详解

    简介 当我们需要定义一些特定有限数量的常量 标签 类型等的时候 最佳方式就是使用枚举 枚举一般用于表示某些特定的有限集合 例如月份 季节 星期等 本篇主要介绍python2 7中的枚举类 即enum中的Enum类 python3 4开始有内