为什么使用枚举

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

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

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

看下图:采用直接定义、类定义、字典定义常量,均可以改变常量的值,达不到永恒不变的要求,另外没有防止相同类型的功能,也就是可以取同一个值,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> ![](https://img2018.cnblogs.com/blog/1372901/201810/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,值:星期天

Python3基础系列——枚举类型大揭秘的更多相关文章

  1. 【转】Java基础笔记 – 枚举类型的使用介绍和静态导入--不错

    原文网址:http://www.itzhai.com/java-based-notes-introduction-and-use-of-an-enumeration-type-static-impor ...

  2. Java基础之枚举类型Enum的使用

    Java基础之枚举类型Enum的使用 定义 public enum AccruedCleanEnum { SPREAD("1","发票"),OTHER(&quo ...

  3. java基础(十一) 枚举类型

    枚举类型Enum的简介 1.什么是枚举类型 枚举类型: 就是由一组具有名的值的有限集合组成新的类型.(即新的类). 好像还是不懂,别急,咱们先来看一下 为什么要引入枚举类型 在没有引入枚举类型前,当我 ...

  4. C#集合类型大揭秘 【转载】

    [地址]https://www.cnblogs.com/songwenjie/p/9185790.html 集合是.NET FCL(Framework Class Library)的重要组成部分,我们 ...

  5. C#集合类型大揭秘

    集合是.NET FCL(Framework Class Library)的重要组成部分,我们平常撸C#代码时免不了和集合打交道,FCL提供了丰富易用的集合类型,给我们撸码提供了极大的便利.正是因为这种 ...

  6. [转]C#集合类型大揭秘

    作者:撸码那些事 来源:https://www.cnblogs.com/songwenjie/p/9185790.html 集合是.NET FCL(Framework Class Library)的重 ...

  7. Java基础之枚举类型

    枚举 为什么需要枚举 在Java开发过程中,有时需要定义一系列有限的数据,如:月份.星期等.<br> java1.5之前,主要通过定义一系列静态常量完成. class Genders{ p ...

  8. Java基础_枚举类型

    作用:让数据更简洁,更易读,增加代码可读性. 为了用1,2,3,4,5分别表示老师,学生,小组,班主任,后勤,可以直接设置一个变量,让roleType = 1,但这样写代码可读性差. 也可以定义一个成 ...

  9. Java基础教程——枚举类型

    枚举类型 枚举类型在JDK 5时引入. enum WeekEnum { MONDAY, TUESDAY, WEDNESDAY, THURDAY, FRIDAY, SATURDAY, SUNDAY } ...

随机推荐

  1. python3解析库BeautifulSoup4

    Beautiful Soup是python的一个HTML或XML的解析库,我们可以用它来方便的从网页中提取数据,它拥有强大的API和多样的解析方式. Beautiful Soup的三个特点: Beau ...

  2. Django 自定义过滤器和模板标签

    前提:自定义模板标签和过滤器必须位于Django的某个应用中,这个应用可以包含一个templatetags目录, 和models.py views.py 处于同一级目录.若这个templatetags ...

  3. Node 7.6默认支持Async/Await

    Node.js 7.6正式默认支持async/await功能,并能够使低内存设备获得更出色的性能. Node 7.6对async/await的支持来自于将V8(Chromium JavaScript引 ...

  4. zabbix客户端日志报错no active checks on server [192.168.3.108:10051]: host [192.168.3.108] not found

    zabbix客户端日志报错: 45647:20160808:220507.717 no active checks on server [192.168.3.108:10051]: host [192 ...

  5. swift的一些知识点(不断完善中)

    首先,隆重推荐文章http://www.infoq.com/cn/articles/swift-brain-gym-optional swift 烧脑体操!目前有4篇文章,说的都很好! 1. 应该充分 ...

  6. webpack——publicPath路径问题

    output: { filename: "[name].js", path:path.resolve(__dirname,"build") } 如果没有指定pu ...

  7. MyEclipse10中启动出现OutOfMemoryError: PermGen space如何解决

    一篇关于技术的文档,分享给大家.在MyEclipse中启动程序运行,报错java.lang.OutOfMemoryError: PermGen space应该怎么办?这是eclipse 内存不够的原因 ...

  8. hihocoder 1343 : Stable Members【拓扑排序】

    hihocoder #1343:题目 解释:一个学习小组,一共有N个学员,一个主管.每个学员都有自己的导师(一个或者多个),导师可以是其他学员也可以是主管.每周学员都要把自己的学习报告和收到的报告提交 ...

  9. asp.net core配置访问地址

    配置Kestrel Urls有四种方式,我这里只介绍一种.其它方式可自行百度. 在Program.cs里使用UseUrls()扩展方法进行设置.UseUrls()方法的参数是个字符串数组,可以同时设置 ...

  10. Codeforces Round #216 (Div. 2)

    以后争取补题不看别人代码,只看思路,今天就是只看思路补完的题,有点小激动. A. Valera and Plates 水题,贪心地先放完第一种食物,在考虑第二种. 居然被卡了一会,心态要蹦 :(: # ...