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,一经查实,立即删除!

相关文章

Java使用Redis

项目是基于 maven 构建的&#xff0c;那么可以直接导入 maven 坐标&#xff0c;如下所示&#xff1a; <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</version> </dependency>…

Vue 父传子组件传参 defineProps

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

第二十一章总结

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

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

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

Java面试题(每天10题)-------连载(42)

目录 Spring篇 1、Spring Bean的作用域之间有什么区别&#xff1f; 2、什么是Spring inner beans&#xff1f; 3、Spring框架中的单例Beans是线程安全的吗&#xff1f; 4、请举例说明如何在Spring中诸如一个Java Collection&#xff1f; 5、如何向Spring Bean中诸如一个J…

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

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

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

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

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

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

JRT打印预览实现

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

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

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

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

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

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

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

C++ vector在使用resize方法时不会改变原有的值.

resize() 函数可以接受以下几种参数&#xff1a; 一个整数参数&#xff1a;将向量的大小调整为指定的整数值。如果指定的大小大于当前向量的大小&#xff0c;则在向量末尾添加默认构造的元素&#xff08;对于 int 类型是0&#xff0c;对于指针类型是nullptr&#xff0c;对于引用…

使用特殊token 编码超级大的voc词表LLM

这里写目录标题 代码解析代码 import pandas as pd import numpy as np from tqdm import tqdm en_voc =pd.read_pickle("/home/aistudio/en_voc.pandas_pickle") # 计算需要几位特殊token 表达 en_voc def gen_sp(en_voc1)

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

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

java WebSocket带参数处理使用

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

【Python百宝箱】分布式魔法:穿越分布式奇境的导航

Python 交响曲&#xff1a;优雅构建分布式系统的奇妙之旅 前言 随着现代应用程序的发展&#xff0c;分布式系统已经成为应对高负载和复杂任务的关键。在这个领域&#xff0c;Python以其灵活性和强大的生态系统展现出了令人惊叹的实力。本文将带您踏上一场神奇之旅&#xff0c…

NDIS协议驱动开发指南

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

【Proteus】绘制简单的电路图

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

PyQt6 QGroupBox分组框控件

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