python枚举模块的学习

ps:小编刚开始学习没多久,部分资源来源于其他网友,如有出错,麻烦联系修改哈,互帮互助,共同进步

一、枚举与字典类型

字典类型的缺点:1.值可变 2.没有防止相同标签的功能

枚举的特点:1.枚举类的值不可以被外界更改 2.不能存在相同的标签,但允许不同标签存在相同的枚举值,即后者相当于前者的别名 3.枚举值可以是任意类型 4.枚举标签尽量用大写

from enum import Enum  #普通类

class dict():
green = 1
green = 2
red = 3 dict.red = 4
print(dict.red) >>> 4
class VIP(Enum):
RED = 1
GREEN =2
YELLOW = 3 VIP.GREEN = 5 #枚举值不能动态更改 >>>File "D:\python\lib\enum.py", line 361, in __setattr__   raise AttributeError('Cannot reassign members.')   AttributeError: Cannot reassign members.
class VIP(Enum):
RED = 1
GREEN =2
YELLOW = 3
YELLOW = 3 #不能出现相同的标签 >>>File "D:\python\lib\enum.py", line 92, in __setitem__
raise TypeError('Attempted to reuse key: %r' % key)
TypeError: Attempted to reuse key: 'YELLOW'
class VIP(Enum):
RED = 1
GREEN =2
YELLOW = 3
BLUE = 3 print(VIP.BLUE) >>>VIP.YELLOW #即VIP.BLUE类似于VIP.YELLOW的别名
class VIP(Enum):
RED = 1 #整型
BLUE = 1.2 #浮点型
GREEN = 'green' #str
YELLOW = True #布尔值

二、枚举类型、枚举名称、枚举值

1.获取枚举类型中的标签:.name属性

2.获取枚举类型中的值:.value属性

from enum import Enum
class VIP(Enum):
RED = 1
GREEN = 'green'
YELLOW = True
BLUE = 1.2 print(VIP.RED) #枚举的类型
print(VIP.YELLOW.name) #枚举的标签
print(VIP.YELLOW.value) #枚举的数值
print('遍历成员。。。')
for i in VIP.__members__.items(): #枚举的遍历
print(i) >>>
VIP.RED
RED
1
遍历成员。。。
('RED', <VIP.RED: 1>)
('GREEN', <VIP.GREEN: 'green'>)
('YELLOW', <VIP.RED: 1>)
('BLUE', <VIP.BLUE: 1.2>)

三、枚举的比较运算

class VIP(Enum):
RED = 1
GREEN = 'green'
YELLOW = True
BLUE = 2
#枚举的比较
a = VIP.RED == VIP.RED #枚举值可以做等值比较
b = VIP.RED == VIP.GREEN
c = VIP.RED is VIP.RED
d = VIP.RED == 1 #枚举标签与枚举值比较,并不相等
f = VIP.RED < VIP.BLUE #枚举值不支持大小比较,打印会报错TypeError: '<' not supported between instances of 'VIP' and 'VIP' print(a)
print(b)
print(c)
print(d) >>>
True
False
True
False

四、枚举的转换

class VIP(Enum):
RED = 1
GREEN = 'green'
YELLOW = True
BLUE = 2 print(VIP(2)) #通过具体值获取枚举类型,返回VIP.BLUE
print(VIP('green')) #返回VIP.GREEN

五、枚举的拓展unique

unique:规定两个不同的枚举不能取相同的值

from enum import Enum,unique

@unique
class VIP(Enum):
RED = 1
GREEN = 1
YELLOW = True
BLUE = 2 >>>报错
ValueError: duplicate values found in <enum 'VIP'>: GREEN -> RED, YELLOW -> RED

六、枚举的拓展auto

如果我们对枚举值没有特别的要求或者没有太大的影响时,我们可以使用auto自动生成对应的数值

from enum import Enum,auto

class VIP(Enum):
RED = auto()
GREEN = auto()
YELLOW = auto()
BLUE = auto() for i in VIP.__members__.items(): #遍历枚举
print(i) >>>
('RED', <VIP.RED: 1>)
('GREEN', <VIP.GREEN: 2>)
('YELLOW', <VIP.YELLOW: 3>)
('BLUE', <VIP.BLUE: 4>)

其实,auto值是调用_generate_next_value_()函数来产生的,我们可以通过重写该函数

from enum import Enum,auto

class auto_test(Enum):
def _generate_next_value_(name, start, count, last_values):
return name class VIP(auto_test):
RED = auto()
GREEN = auto()
YELLOW = auto()
BLUE = auto() # for i in VIP.__members__.items(): #遍历枚举
# print(i)
print(list(VIP)) #转换列表 >>>
[<VIP.RED: 'RED'>, <VIP.GREEN: 'GREEN'>, <VIP.YELLOW: 'YELLOW'>, <VIP.BLUE: 'BLUE'>]

python3 enum模块的应用的更多相关文章

  1. python3 enum模块

    枚举是绑定到唯一的常量值的一组符号名称(成员).在枚举中,成员可以通过身份进行比较,枚举本身可以迭代. 1.Enum模块 该模块定义了四个枚举类,可用于定义唯一的名称和值集:Enum,IntEnum, ...

  2. [转]python3之模块psutil系统性能信息

    转自:https://www.cnblogs.com/zhangxinqi/p/9106265.html 阅读目录 1.psutil模块安装 2.获取CPU信息 3.内存信息 4.磁盘信息 5.网络信 ...

  3. 【转】Python3 configparse模块(配置)

    [转]Python3 configparse模块(配置) ConfigParser模块在python中是用来读取配置文件,配置文件的格式跟windows下的ini配置文件相似,可以包含一个或多个节(s ...

  4. Python3 operator模块关联代替Python2 cmp() 函数

    Python2 cmp() 函数 描述 cmp(x,y) 函数用于比较2个对象,如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1. Python ...

  5. Python3 logging 模块

    Python3 logging模块 日志模块: 用于便捷记录日志且线程安全的模块 CRITICAL = 50 FATAL = CRITICAL ERROR = 40 WARNING = 30 WARN ...

  6. python3 selenium模块Chrome设置代理ip的实现

    python3 selenium模块Chrome设置代理ip的实现 selenium模块Chrome设置代理ip的实现代码: from selenium import webdriver chrome ...

  7. python3 导入模块

    python3导入模块和python2  有些不同   需要指定相对目录 如,在Project下有一个nlp目录里面有一个ltp模块,则 from n1.ltp import Clawer

  8. python3之模块

    1.python3模块 模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py.模块可以被别的程序引入,以使用该模块中的函数等功能.这也是使用 python 标准库的方法. 模块让你能够有逻辑地 ...

  9. Python3数据库模块(sqlite3,SQLite3)

    一.sqlite命令 创建数据库:在控制台sqlite3 name .databases     查看数据库 .tables            查看表格名 databaseName .dump & ...

随机推荐

  1. G. Gangsters in Central City

    给出一棵$1$为根节点的含$n$个节点的树,叶子节点都是房屋,在一个集合里面添加房屋和移除房屋. 每一次添加和移除后,回答下面两个问题. 1.  使得已选房屋都不能从根节点到达,最少需要砍多少条边. ...

  2. 学习sklearn聚类使用

    学习利用sklearn的几个聚类方法: 一.几种聚类方法 1.高斯混合聚类(mixture of gaussians) 2.k均值聚类(kmeans) 3.密度聚类,均值漂移(mean shift) ...

  3. Centos6.6 安装Mysql集群

    一.环境准备 1.1系统IP设置 准备三台服务器安装Centos6.6 64位操作系统,IP地址及角色分配如下: Node                 IP Address            ...

  4. MariaDB 默认是禁止远程访问的 我们改掉它

    查询用户账号信息: select User, host from mysql.user; 现在只显示  root账户中的host项是localhost表示该账号只能进行本地登录,我们需要修改权限,输入 ...

  5. NP-Hard问题和NP-Complete问题

    对 NP-Hard问题和NP-Complete问题的一个直观的理解就是指那些很难(很可能是不可能)找到多项式时间算法的问题.因此一般初学算法的人都会问这样一个问题:NP-Hard和NP-Complet ...

  6. bootstrap 学习笔记(部分)

    这个课程中的boostrap是3.0+版本的.(2.0与3.0有区别) bootstrap中的JS是依赖于jquery的,所以需要事先引用jquery(1.9.0版本以上). <!DOCTYPE ...

  7. vue组件化初体验 全局组件和局部组件

    vue组件化初体验 全局组件和局部组件 vue组件化 全局组件 局部组件  关于vue入门案例请参阅 https://www.cnblogs.com/singledogpro/p/11938222.h ...

  8. leetcode-easy-string-242. Valid Anagram

    mycode   71.97% class Solution(object): def isAnagram(self, s, t): """ :type s: str : ...

  9. 四十五:数据库之SQLAlchemy之subquery实现复杂查询

    子查询让多个查询变成一个查询,只需要查找一次数据库,性能相对来讲更高效,不用写多个SQL语句就可以实现一些复杂的查询,在SQLAlchemy中要实现一个子查询,应该使用以下步骤:1.将子查询按照传统方 ...

  10. 重复执行用例(pytest-repeat)

    前言 平常在做功能测试的时候,经常会遇到某个模块不稳定,偶然会出现一些bug,对于这种问题我们会针对此用例反复执行多次,最终复现出问题来.自动化运行用例时候,也会出现偶然的bug,可以针对单个用例,或 ...