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

为什么使用枚举

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

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

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

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

1372901-20181030092959834-1951456610.jpg

枚举类型的优势

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

1372901-20181030093016831-273333697.jpg

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

1372901-20181030093030835-834442409.jpg

枚举类型的使用

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

1372901-20181030093105922-100521343.jpg

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

转载于:https://www.cnblogs.com/brightyuxl/p/9874915.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值