Python3基础系列——枚举类型大揭秘
程序员文章站
2022-03-30 22:30:15
为什么使用枚举 枚举类型是定义常量的一种最优选择。 常量 的广义概念是: 不变化的量 对于 常量 的通俗比喻—— 如同大山不被轻而易举地改变 地球上的重力加速度到海枯石烂也会改变 人们使用的常量是时间不很漫长的那一段时期基本上不会改变的量 真空状态中的光速是常量理论上不可改变,是常量 看下图: 采用 ......
为什么使用枚举
枚举类型是定义常量的一种最优选择。
常量的广义概念是:不变化的量
对于常量的通俗比喻——如同大山不被轻而易举地改变
地球上的重力加速度到海枯石烂也会改变 人们使用的常量是时间不很漫长的那一段时期基本上不会改变的量 真空状态中的光速是常量理论上不可改变,是常量
看下图:采用直接定义、类定义、字典定义常量,均可以改变常量的值,达不到永恒不变的要求,另外没有防止相同类型的功能,也就是可以取同一个值,monday = 1,friday = 1。
枚举类型的优势
优势1:定义的量不可改变
优势2:可以防止同一类型取相同的值
枚举类型的使用
- 枚举的类型
- 枚举的name
- 枚举的value
from enum import enum class week(enum): monday = 1 monday_alias = 1 tuesday = 2 wednesday = 3 thursday = 4 friday = 5 saturday = 6 sunday = 7 print('----访问名字---') print(week.monday_alias.name) print('----访问值---') print(week.friday.value) print('----访问类型---') print(week['saturday']) print(week.friday) print('---循环所有类型简洁----') for w in week.__members__: print(w) print('----循环所有类型复杂---') for w in week.__members__.items(): print(w) print('---循环不重复值的类型----') for w in week: print(w)
结果
----访问名字--- monday ----访问值--- 5 ----访问类型--- week.saturday week.friday ---循环所有类型简洁---- monday monday_alias tuesday wednesday thursday friday saturday sunday ----循环所有类型复杂--- ('monday', <week.monday: 1>) ('monday_alias', <week.monday: 1>) ('tuesday', <week.tuesday: 2>) ('wednesday', <week.wednesday: 3>) ('thursday', <week.thursday: 4>) ('friday', <week.friday: 5>) ('saturday', <week.saturday: 6>) ('sunday', <week.sunday: 7>) ---循环不重复值的类型---- week.monday week.tuesday week.wednesday week.thursday week.friday week.saturday week.sunday
枚举类型拓展
定义方式1
from enum import enum week = enum('week', ('monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday')) for name, member in week.__members__.items(): print("名字{},=》,成员{},值{}".format(name, member, member.value))
结果
名字monday,=》,成员week.monday,值1 名字tuesday,=》,成员week.tuesday,值2 名字wednesday,=》,成员week.wednesday,值3 名字thursday,=》,成员week.thursday,值4 名字friday,=》,成员week.friday,值5 名字saturday,=》,成员week.saturday,值6 名字sunday,=》,成员week.sunday,值7
定义方式2
from enum import enum, unique @unique # @unique这个装饰器是帮我们检查是否有重复的值。 class week(enum): monday = 1 # monday_alias = 1 如果有这个语句,程序运行出错 tuesday = 2 wednesday = 3 thursday = 4 friday = 5 saturday = 6 sunday = 7 for name, member in week.__members__.items(): print("名字{},=》,成员{},值{}".format(name, member, member.value))
结果
名字monday,=》,成员week.monday,值1 名字tuesday,=》,成员week.tuesday,值2 名字wednesday,=》,成员week.wednesday,值3 名字thursday,=》,成员week.thursday,值4 名字friday,=》,成员week.friday,值5 名字saturday,=》,成员week.saturday,值6 名字sunday,=》,成员week.sunday,值7
相关知识之enumerate
enumerate()
enumerate()是一个内置函数,不用导入 enumerate可用for循环,enumerate将其组成一个索引序列,利用它可以同时获得索引和值
代码1
week = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] for num, day in enumerate(week): print("索引:{},值:{}".format(num, day))
结果
索引:0,值:星期一 索引:1,值:星期二 索引:2,值:星期三 索引:3,值:星期四 索引:4,值:星期五 索引:5,值:星期六 索引:6,值:星期天
** 代码2**
week = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] for num, day in enumerate(week, 1): # 指定起始序号enumerate(week, 1) print("索引:{},值:{}".format(num, day))
结果
索引:1,值:星期一 索引:2,值:星期二 索引:3,值:星期三 索引:4,值:星期四 索引:5,值:星期五 索引:6,值:星期六 索引:7,值:星期天
下一篇: python学习笔记:第9天 函数初步