Python3基础系列——枚举类型大揭秘
为什么使用枚举
枚举类型是定义常量的一种最优选择。
**常量**的广义概念是:**不变化的量**
对于**常量**的通俗比喻——**如同大山不被轻而易举地改变**
地球上的重力加速度到海枯石烂也会改变
人们使用的常量是时间不很漫长的那一段时期基本上不会改变的量
真空状态中的光速是常量理论上不可改变,是常量
看下图:采用直接定义、类定义、字典定义常量,均可以改变常量的值,达不到永恒不变的要求,另外没有防止相同类型的功能,也就是可以取同一个值,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
<p style="border-style:solid;">定义方式2</p>
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
<p style="border-style:solid;">相关知识之enumerate</p>

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,值:星期天
Python3基础系列——枚举类型大揭秘的更多相关文章
- 【转】Java基础笔记 – 枚举类型的使用介绍和静态导入--不错
原文网址:http://www.itzhai.com/java-based-notes-introduction-and-use-of-an-enumeration-type-static-impor ...
- Java基础之枚举类型Enum的使用
Java基础之枚举类型Enum的使用 定义 public enum AccruedCleanEnum { SPREAD("1","发票"),OTHER(&quo ...
- java基础(十一) 枚举类型
枚举类型Enum的简介 1.什么是枚举类型 枚举类型: 就是由一组具有名的值的有限集合组成新的类型.(即新的类). 好像还是不懂,别急,咱们先来看一下 为什么要引入枚举类型 在没有引入枚举类型前,当我 ...
- C#集合类型大揭秘 【转载】
[地址]https://www.cnblogs.com/songwenjie/p/9185790.html 集合是.NET FCL(Framework Class Library)的重要组成部分,我们 ...
- C#集合类型大揭秘
集合是.NET FCL(Framework Class Library)的重要组成部分,我们平常撸C#代码时免不了和集合打交道,FCL提供了丰富易用的集合类型,给我们撸码提供了极大的便利.正是因为这种 ...
- [转]C#集合类型大揭秘
作者:撸码那些事 来源:https://www.cnblogs.com/songwenjie/p/9185790.html 集合是.NET FCL(Framework Class Library)的重 ...
- Java基础之枚举类型
枚举 为什么需要枚举 在Java开发过程中,有时需要定义一系列有限的数据,如:月份.星期等.<br> java1.5之前,主要通过定义一系列静态常量完成. class Genders{ p ...
- Java基础_枚举类型
作用:让数据更简洁,更易读,增加代码可读性. 为了用1,2,3,4,5分别表示老师,学生,小组,班主任,后勤,可以直接设置一个变量,让roleType = 1,但这样写代码可读性差. 也可以定义一个成 ...
- Java基础教程——枚举类型
枚举类型 枚举类型在JDK 5时引入. enum WeekEnum { MONDAY, TUESDAY, WEDNESDAY, THURDAY, FRIDAY, SATURDAY, SUNDAY } ...
随机推荐
- 笔记软件 notion
笔记软件 notion : https://www.notion.so 注册:zengxinle@126.com 团队:Hopesun
- Tomcat启动项目时内存溢出问题如何解决
在Eclipse中,内存溢出(报不能创建JAVA虚拟机错时,也可能是这里配错了.) 1.双击Tomcat,点击Open launch configuration,Arguments, 2.在VM ar ...
- V$SQLAREA
1.查看消耗资源最多的SQL: SELECT hash_value, executions, buffer_gets, disk_reads, parse_calls FROM V$SQLAREA W ...
- 转载:2.2 Nginx配置的通用语法《深入理解Nginx》(陶辉)
原文:https://book.2cto.com/201304/19625.html Nginx的配置文件其实是一个普通的文本文件.下面来看一个简单的例子.user nobody; worker_p ...
- POJ 3243 // HDU 2815(改下输出,加个判断)
A^x = B (mod C) 的模板题,不够要用扩展BSGS (虽然AC,但完全理解不了模板0.0,以后学好数学在来慢慢理解555555) #include <iostream> #in ...
- JAVA中各种日期表示字母
字母 日期或时间元素 表示 示例 G Era 标志符 Text AD y 年 Year 1996; 96 M 年中的月份 Month July; Jul; 07 w 年中的周数 Number 27 W ...
- 测试开发之Django——No7.Django模板中的过滤器
1.add 将参数添加到值. 例如: {{ value|add:"2" }} 如果value是4,那么输出将是6. 此过滤器将首先尝试将两个值强制转换为整数.如果失败,它将尝试将值 ...
- Inno Setup 系列之安装、卸载前检测进程运行情况并关闭相应进程
需求 最近用 Inno Setup 做一个exe,可是在安装之前要停止正在运行的相应进程或者在卸载之前要停止正在运行的相应进程,可是发现它自身的方法不能满足要求,最后经过度娘的耐心帮助下终于在网上找到 ...
- js面向对象 下
// 声明对象的方法 一 (通过常量直接赋值) var xiaoming = {//声明一个对象(直接通过一个常量xiaoming用{}赋值的方式声明) name: '小明', //对象的一个属性 ...
- 将eclipse的maven项目导入到intellij idea中
最近项目中需要用到idea,需要将原来的eclipse项目进行转移.捣鼓了半天终于成功了,在这里和大家分享下,希望对大家有所帮助,如有错误,欢迎指正. idea的确是一款很智能的开发工具,真的是爱不释 ...