Python 进阶(十四):枚举类型(enum 模块)

在这里插入图片描述
大家好,我是水滴~~

本篇文章主要介绍了Python中的枚举类型,主要内容包括:枚举类型的简介、创建枚举类型、使用枚举类型等。

文章中包含大量的代码示例,能够帮助新手同学快速入门。

《Python入门核心技术》专栏总目录・点这里

文章目录

  • 1. 什么是枚举类型?
  • 2. 定义枚举类型
  • 3. 使用枚举类型
  • 4. 枚举常量的值和名称
  • 5. 使用枚举类型替代常量
  • 6. 总结


Python中的枚举类型是一种有用的工具,它允许我们定义具有预定义值的常量集合。本文将详细介绍Python枚举类型的概念、用法和示例代码,并探讨如何使用枚举类型简化代码并提高可读性。

1. 什么是枚举类型?

枚举类型是一种用于定义具有预定义值的常量集合的数据类型。它可以帮助我们在代码中使用有意义的符号名称来表示不同的状态、选项或选择。Python中的枚举类型是通过enum模块实现的。

枚举类型在编程中有以下几个特点:

  • 有限的取值范围:枚举类型定义了一组有限的取值范围,这些取值都是预定义好的,不可更改。

  • 唯一性:每个枚举成员都有一个唯一的名称,用于标识该成员。

  • 关联的值:除了名称外,每个枚举成员还可以与一个相关联的值进行关联。这个值可以是数字、字符串或其他任意类型。

  • 可迭代性:枚举类型的成员可以被迭代,可以遍历枚举类型的所有成员。

枚举类型可以提供更加清晰和可读性强的代码。它们可以用于表示有限的选项或状态,并允许我们在代码中使用更有描述性的名称来引用这些选项。枚举类型在避免使用散列常量或魔法数字时非常有用,提高了代码的可维护性和可读性。

2. 定义枚举类型

要定义一个枚举类型,我们需要导入Enum类,并创建一个继承自它的子类。每个枚举常量都可以通过子类的类属性来定义。

from enum import Enumclass Color(Enum):RED = 1GREEN = 2BLUE = 3

在上述示例中,我们定义了一个名为Color的枚举类型,它包含了三个常量:REDGREENBLUE。每个常量都可以通过枚举类型的属性来访问。

3. 使用枚举类型

使用枚举类型可以提高代码的可读性,因为我们可以使用有意义的符号名称来表示不同的选项。以下是一些使用枚举类型的示例:

# 访问枚举常量
print(Color.RED)  # 输出: Color.RED# 比较枚举常量
if Color.GREEN == Color.BLUE:print("颜色相同")
else:print("颜色不同")  # 输出: 颜色不同# 迭代枚举常量
for color in Color:print(color)  # 输出: Color.RED, Color.GREEN, Color.BLUE

我们可以像访问类属性一样访问枚举常量,通过枚举类型的成员访问。我们还可以使用比较运算符来比较枚举常量,并可以通过迭代枚举类型来遍历所有的枚举常量。

4. 枚举常量的值和名称

每个枚举常量都有一个与其关联的值和名称。默认情况下,值和名称都是相同的,但我们也可以为每个常量显式设置不同的值。

from enum import Enum, autoclass Status(Enum):PENDING = auto()PROCESSING = auto()COMPLETED = auto()print(Status.PENDING.value)  # 输出: 1
print(Status.PROCESSING.name)  # 输出: PROCESSING

在上述示例中,我们使用auto()函数为每个常量生成唯一的值,并且可以通过.value属性访问值,通过.name属性访问名称。

5. 使用枚举类型替代常量

枚举类型可以用于替代使用常量的情况,从而提供更好的可读性和可维护性。

# 使用枚举类型替代常量
def process_data(status):if status == Status.PENDING:print("数据正在等待处理")elif status == Status.PROCESSING:print("数据正在处理中")elif status == Status.COMPLETED:print("数据处理完成")process_data(Status.PENDING)  # 输出: 数据正在等待处理

在上述示例中,我们定义了一个process_data()函数,它接收一个Status枚举类型的参数。通过使用枚举类型,我们可以使用有意义的符号名称来表示不同的状态,而不是使用难以理解的常量值。

6. 总结

Python的枚举类型是一种强大的工具,可以帮助我们定义具有预定义值的常量集合。通过使用枚举类型,我们可以提高代码的可读性和可维护性。本文介绍了Python枚举类型的概念、定义和使用方法,并提供了示例代码演示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/202454.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue 父传子组件传参 defineProps

defineProps 属性:用于接收父组件传递过来的数据。 注意:如果 defineProps 接收的参数名,和已有变量名相同,就会造成命名冲突。 语法格式: // 无限制 const props defineProps([参数名, 参数名]);// 限制数据类型 …

第二十一章总结

一、网络通信: 1.网络程序设计基础:网络程序设计编写的是与其他计算机进行通信的程序。 1.1局域网与互联网:为了实现两台计算机的通信,必须用一个网络线路连接两台计算机 2.网络协议:网络协议规定了计算机之间连接的…

文心一言大模型应用开发入门

本文重点介绍百度智能云平台、文心一言、千帆大模型平台的基本使用与接入流程及其详细步骤。 注册文心一言 请登录文心一言官方网站 https://yiyan.baidu.com/welcome 点击登录;图示如下: 请注册文心一言账号并点击登录,图示如下&#xff1…

游戏:火星孤征 - deliver us mars - 美图秀秀~~

今天水一篇,借着免费周下载了deliver us mars,玩下来截了好多图,就放这里了。 游戏没有难度,剧情也不难理解,美图到处都是,建模细节也是满满,值得一玩。 游戏中的 A.S.E是守卫飞行机器人&…

力扣刷题day2(最长公共前缀,有效括号,删除有序数组中的重复元素)

题目1:14.最长公共前缀 思路和解析: #define _CRT_SECURE_NO_WARNINGS //最长公共前缀 char* longestCommonPrefix(char** strs, int strsSize) {// 如果字符串数组为空,则返回空字符串if (strsSize 0){return "";}// 将第一个…

网络安全威胁——跨站脚本攻击

跨站脚本攻击 1. 定义2. 跨站脚本攻击如何工作3. 跨站脚本攻击类型4. 如何防止跨站脚本攻击 1. 定义 跨站脚本攻击(Cross-site Scripting,通常称为XSS),是一种典型的Web程序漏洞利用攻击,在线论坛、博客、留言板等共享…

JRT打印预览实现

JRT客户端部分已经实现了打印、导出Excel部分,之前没实现打印预览部分,因为要自己写打印预览界面,所以留到最后做,经过两晚的努力,实现了打印预览。 效果: 打印预览界面代码 package Monitor.Print;import javafx.a…

海鹰数据 shopee :为Shopee卖家提供的数据分析工具

在如今的电商时代,拥有准确的市场数据和深入的竞争分析是每个卖家成功的关键。为了帮助Shopee卖家更好地了解市场趋势、优化商品策略并提高运营效果,海鹰数据(Haiying Data)应运而生。作为一个专注于Shopee平台的数据分析工具&…

【日常总结】树莓派导致的公司无法上网 - 广播风暴

一、场景 二、问题 三、分析原因 四、解决方案 方案一:更换树莓派后ping路由器恢复正常 方案二:配置交换机 交换机广播风暴配置 也可以通过PPS来限速 查看配置 一、场景 宽带:公司3条500M光纤-联通 路由器:锐捷 在线用户…

VMware vSphere Web Services SDK 6.5编程指南(译文)

VMware vSphere Web Services SDK 6.5编程指南(译文) 本文档根据VMware vSphere 6.5 Documentation Center进行翻译整理,总共八章共110页。 先申明该译文文档非免费,有需要的可以联系(私信或微信)译者,文章尾部留也有联系方式。 目录 … ……

SAP MM中的科目分配类别是什么,如何配置

一、概述 这篇文章将概述 SAP MM 中的科目分配类别的基本概念以及如何在系统中配置它。我将在SAP配置中逐步解释配置。在此之前要理解采购的两种模式,库存物料采购和消耗型物料采购之间的区别。 1.1、库存采购 库存采购的物料,在收货后做库存管理&…

java WebSocket带参数处理使用

1、webSocket实现代码 Component public class WebSocketStompConfig {//这个bean的注册,用于扫描带有ServerEndpoint的注解成为websocket// ,如果你使用外置的tomcat就不需要该配置文件Beanpublic ServerEndpointExporter serverEndpointExporter() {return new ServerEndpoi…

NDIS协议驱动开发指南

文章目录 NDIS协议驱动开发指南1. 技术概览2. NDIS协议驱动2.1 BindAdapterHandlerEx2.2 SendNetBufferListsCompleteHandler2.3 ReceiveNetBufferListsHandler2.4 ProtocolNetPnpEvent 3. NET_BUFFER_LIST4. ndisprot实例5. 总结 NDIS协议驱动开发指南 我们知道,在…

【Proteus】绘制简单的电路图

参考书籍:微机原理与接口技术——基于8086和Proteus仿真(第3版)(作者:顾晖等),p111 1.放置元件 以8086为例: 确保处于元件模式,点击对应的按钮: 在元件库中…

PyQt6 QGroupBox分组框控件

​锋哥原创的PyQt6视频教程: 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计37条视频,包括:2024版 PyQt6 Python桌面开发 视频教程(无废话…

Python自动化测试selenium核心技术处理弹框

页面上的弹框一般有三种: (1)alert:用来提示 (2)confirm:用来确认 (2)prompt:输入内容 示例网站:Sahi Tests 示例场景:打开Sahi T…

深入了解 CPU 的型号、代际架构与微架构!

CPU 在整个计算机硬件中、技术体系中都算是最最重要的东西了。在 10 月 16 号的时候,Intel 正式发布了第 14 代的酷睿处理器。但很多同学看不懂这种发布会上发布的各种 CPU 参数。 今天借着这个时机,从 CPU 硬件相关的技术细节切入,来深入地…

基于SSM的物资物流系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

Distilling the Knowledge in a Neural Network(2015.5)(d补)

文章目录 Abstract1 Introduction2 Distillation2.1 Matching logits is a special case of distillation Results 论文链接 Abstract 提高几乎所有机器学习算法性能的一种非常简单的方法是在相同的数据上训练许多不同的模型,然后对它们的预测进行平均[3]。不幸的是…

C++之类和对象(下)

目录 初始化列表 static成员 C11对于非静态成员变量初始化 友元 友元函数 友元类 总结 初始化列表 我们知道,在学习构造函数时,我们知道对象的成员变量的初始化我们是在构造函数函数体内进行初始化的,还有没有其它初始化成员变量的方…