欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python3基础系列——枚举类型大揭秘

程序员文章站 2022-03-30 22:30:15
为什么使用枚举 枚举类型是定义常量的一种最优选择。 常量 的广义概念是: 不变化的量 对于 常量 的通俗比喻—— 如同大山不被轻而易举地改变 地球上的重力加速度到海枯石烂也会改变 人们使用的常量是时间不很漫长的那一段时期基本上不会改变的量 真空状态中的光速是常量理论上不可改变,是常量 看下图: 采用 ......

为什么使用枚举

枚举类型是定义常量的一种最优选择。

常量的广义概念是:不变化的量
对于常量的通俗比喻——如同大山不被轻而易举地改变

地球上的重力加速度到海枯石烂也会改变
人们使用的常量是时间不很漫长的那一段时期基本上不会改变的量
真空状态中的光速是常量理论上不可改变,是常量

看下图:采用直接定义、类定义、字典定义常量,均可以改变常量的值,达不到永恒不变的要求,另外没有防止相同类型的功能,也就是可以取同一个值,monday = 1,friday = 1。

Python3基础系列——枚举类型大揭秘

枚举类型的优势

优势1:定义的量不可改变

Python3基础系列——枚举类型大揭秘

优势2:可以防止同一类型取相同的值

Python3基础系列——枚举类型大揭秘

枚举类型的使用

  • 枚举的类型
  • 枚举的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

Python3基础系列——枚举类型大揭秘

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,值:星期天