当前位置: 首页 > news >正文

LQB(2)-python-枚举

前言

python中的枚举一般有两个说法,一个是枚举算法(暴力求解法,算法层面),一个是遍历使用enumerate()函数或者enum模块创建()。

暴力求解法在之前的博文里面讲过了👇,这篇主要讲enumerate()函数和enum模块。

python算法从入门到实践(章一):枚举(暴力)算法_《玩转python编程中的枚举算法》-CSDN博客

一、enumerate() 函数

1. 功能

enumerate() 是一个内置函数,用于在遍历可迭代对象(如列表、元组、字符串等)时,同时获取元素的索引和值。

2. 语法
enumerate(iterable, start=0)
  • iterable:需要遍历的可迭代对象。

  • start:索引的起始值(默认为 0)。

3. 示例
fruits = ['apple', 'banana', 'cherry']
for index, value in enumerate(fruits):print(index, value)

输出

0 apple
1 banana
2 cherry
4. 特点
  • 内置函数:无需导入任何模块。

  • 用途:简化遍历时的索引管理。


二、enum 模块

1. 功能

enum 模块用于定义枚举类型。枚举类型是一种特殊的类,用于表示一组固定的常量(如星期、状态码等),提高代码的可读性和可维护性。

2. 语法
from enum import Enumclass EnumName(Enum):MEMBER1 = value1MEMBER2 = value2...
3. 示例
from enum import Enumclass Weekday(Enum):MONDAY = 1TUESDAY = 2WEDNESDAY = 3THURSDAY = 4FRIDAY = 5SATURDAY = 6SUNDAY = 7print(Weekday.MONDAY)        # 输出: Weekday.MONDAY
print(Weekday.MONDAY.value)  # 输出: 1
4. 特点
  • 需要导入enum 模块不是内置函数,需要显式导入。

  • 用途:定义一组命名的常量,避免使用魔法数字(magic numbers)。


三、enumerate() 和 enum 的区别

特性enumerate()enum 模块
类型内置函数模块(需导入)
功能遍历可迭代对象时获取索引和值定义枚举类型(一组命名的常量)
使用场景遍历列表、元组、字符串等定义状态码、选项分类等
是否需要导入不需要需要导入 enum 模块
示例for i, v in enumerate(['a', 'b', 'c']):class Color(Enum): RED = 1

四、为什么需要 enum 模块?

尽管 enumerate() 可以方便地遍历可迭代对象,但它无法替代 enum 模块的功能。以下是 enum 模块的主要优势:

  1. 提高代码可读性

    • 使用枚举类型可以避免魔法数字(magic numbers,在代码中直接出现的、没有明确意义的硬编码数字或字符串),使代码更易读。

    • 例如,Weekday.MONDAY 比 1 更直观。

  2. 类型安全

    • 枚举成员是唯一的,不能随意赋值或修改。

    • 例如,Weekday.MONDAY = 2 会引发错误。

  3. 支持迭代和比较

    • 枚举类型支持遍历、比较等操作。

    • 例如:

      for day in Weekday:print(day)
  4. 扩展功能

    • enum 模块提供了 @unique 装饰器、auto() 等功能,方便定义复杂的枚举类型。


五、总结

  • enumerate():用于遍历可迭代对象时获取索引和值,是内置函数,无需导入。

  • enum 模块:用于定义枚举类型,表示一组固定的常量,需要显式导入。

http://www.lryc.cn/news/534228.html

相关文章:

  • MongoDB开发规范
  • 为什么DeepSeek服务器繁忙?
  • 律所录音证据归集工具:基于PyQt6与多线程的自动化音频管理解决方案
  • 【含开题报告+文档+PPT+源码】基于SpringBoot+Vue旅游管理网站
  • unity碰撞的监测和监听
  • DeepSeek-R1 32B Windows+docker本地部署
  • C++11新特性之unique_ptr智能指针
  • Vue与Konva:解锁Canvas绘图的无限可能
  • python绘图之柱状堆积图的绘制
  • 剪辑学习整理
  • DeepSeek从入门到精通:全面掌握AI大模型的核心能力
  • AI大模型训练实战:分布式与微调指南
  • 整合 Redis 分布式锁:从数据结构到缓存问题解决方案
  • 并查集题目
  • 日志2025.2.9
  • 支持多种网络数据库格式的自动化转换工具——VisualXML
  • Java并发编程笔记
  • 大语言模型实践——基于现有API的二次开发
  • 获取程序运行目录 (jar运行目录)
  • Elasticsearch:如何使用 Elastic 检测恶意浏览器扩展
  • Oracle CDB自动处理表空间不足脚本
  • java-list深入理解(流程图)
  • Vue 中的 keep-alive 组件是什么?
  • 单元测试的入门实践与应用
  • 【大模型】硅基流动对接DeepSeek使用详解
  • [Windows] PDF补丁丁v1.1.0.4627绿色版
  • Oracle 变更redo log文件位置
  • 使用Redis实现业务信息缓存(缓存详解,缓存更新策略,缓存三大问题)
  • 已验证正常,Java输入字符串生成PDF文件
  • android手机安装deepseek-r1:1.5b