制作一个专门浏览图片的网站项目推广计划书
前言
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 模块的主要优势:
-  
提高代码可读性:
-  
使用枚举类型可以避免魔法数字(magic numbers,在代码中直接出现的、没有明确意义的硬编码数字或字符串),使代码更易读。
 -  
例如,
Weekday.MONDAY比1更直观。 
 -  
 -  
类型安全:
-  
枚举成员是唯一的,不能随意赋值或修改。
 -  
例如,
Weekday.MONDAY = 2会引发错误。 
 -  
 -  
支持迭代和比较:
-  
枚举类型支持遍历、比较等操作。
 -  
例如:
for day in Weekday:print(day) 
 -  
 -  
扩展功能:
-  
enum模块提供了@unique装饰器、auto()等功能,方便定义复杂的枚举类型。 
 -  
 
五、总结
-  
enumerate():用于遍历可迭代对象时获取索引和值,是内置函数,无需导入。 -  
enum模块:用于定义枚举类型,表示一组固定的常量,需要显式导入。 
