首页 / 知识
Python 枚举
2023-11-12 13:34:00
1.枚举的定义
首先,定义枚举要导入enum模块。
枚举定义用class关键字,继承Enum类。
用于定义枚举的class和定义类的class是有区别【下一篇博文继续分享】。
示例代码:
fromenumimportEnum
classColor(Enum):
red=1
orange=2
yellow=3
green=4
blue=5
indigo=6
purple=7
代码分析:
上面的代码,我们定义了颜色的枚举Color.
颜色枚举有7个成员,分别是Color.red、Color.orange、Color.yellow等。
每一个成员都有它们各自名称和值,Color.red成员的名称是:red,值是:1。
每个成员的数据类型就是它所属的枚举。【*注:用class定义的类,实际上就是一种类型】
1.1定义枚举时,成员名称不允许重复
fromenumimportEnum
classColor(Enum):
red=1
red=2
上面的代码,就无法执行。提示错误:TypeError:Attemptedtoreusekey:'red'
1.2默认情况下,不同的成员值允许相同。但是两个相同值的成员,第二个成员的名称被视作第一个成员的别名
fromenumimportEnum
classColor(Enum):
red=1
red_alias=1
成员Color.red和Color.red_alias具有相同的值,那么成员Color.red_alias的名称red_alias就被视作成员Color.red名称red的别名。
1.3如果枚举中存在相同值的成员,在通过值获取枚举成员时,只能获取到第一个成员
fromenumimportEnum
classColor(Enum):
red=1
red_alias=1
print(Color(1))
输出结果为:Color.red
1.4如果要限制定义枚举时,不能定义相同值的成员。可以使用装饰器@unique【要导入unique模块】
fromenumimportEnum,unique
@unique
classColor(Enum):
red=1
red_alias=1
再执行就会提示错误:ValueError:duplicatevaluesfoundin:red_alias->red
2.枚举取值
2.1通过成员的名称来获取成员
Color['red']
2.2通过成员值来获取成员
Color(2)
2.3通过成员,来获取它的名称和值
red_member=Color.red
red_member.name
red_member.value
3.迭代器
3.1枚举支持迭代器,可以遍历枚举成员
forcolorinColor:
print(color)
输出结果是,枚举的所有成员。Color.red、Color.orange、Color.yellow、Color.green、Color.blue、Color.indigo、Color.purple。
3.2如果枚举有值重复的成员,循环遍历枚举时只获取值重复成员的第一个成员
fromenumimportEnum
classColor(Enum):
red=1
orange=2
yellow=3
green=4
blue=5
indigo=6
purple=7
red_alias=1
forcolorinColor:
print(color)
输出结果是:Color.red、Color.orange、Color.yellow、Color.green、Color.blue、Color.indigo、Color.purple。但是Color.red_alias并没有出现在输出结果中。
3.3如果想把值重复的成员也遍历出来,要用枚举的一个特殊属性__members__
fromenumimportEnum
classColor(Enum):
red=1
orange=2
yellow=3
green=4
blue=5
indigo=6
purple=7
red_alias=1
forcolorinColor.__members__.items():
print(color)
输出结果:('red',)、('orange',)、('yellow',)、('green',)、('blue',)、
('indigo',)、('purple',)、('red_alias',)
4.枚举比较
4.1枚举成员可进行同一性比较
Color.redisColor.red
输出结果是:True
Color.redisnotColor.blue
输出结果是:True
4.2枚举成员可进等值比较
Color.blue==Color.red
输出结果是:False
Color.blue!=Color.red
输出结果是:True
4.3枚举成员不能进行大小比较
Color.red 输出结果出错:TypeError:unorderabletypes:Color() 以上内容为大家介绍了Python枚举,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注我们
最新内容
相关内容
为何你的Python代码应是扁平与稀疏
为何你的Python代码应是扁平与稀疏的,代码,培训,信息,观察,设计,工具,嵌套,闻闻,程序员,沉思,Python之禅之所以得名,正是由于它那简明扼要的规Python 之模块重载的五种方法
Python 之模块重载的五种方法,环境,培训,方法,模块,文件夹,例子,下面,内容,语句,请看,python环境准备新建一个foo文件夹,其下包含一个bar.py文Python标准库之collections模块
Python标准库之collections模块,名字,标准,信息,电话号码,培训,工厂,位置,简介,异常,对象,collections模块简介collections是Python标准库里Python模块化有哪些好处?
Python模块化有哪些好处?,管理,代码,软件,汽车,培训,复杂度,模块,功能,程序,好处,当然,如果不将程序分解成一个个独立的部分,而是整个一大坨,也Python可执行文件和模块
Python可执行文件和模块,标准,培训,模块,文件,属性,上面,内容,变量,函数,源码,python源代码文件按照功能可以分为两种类型:用于执行的可执行程怎么在Python装饰器中自定义功能呢
怎么在Python装饰器中自定义功能呢?,代码,包装,环境,名称,工具,名字,变动,业务,主体,面临,setattr和getattr操作首先我们来看下setattr和getaPython查看模块中的属性
Python查看模块中的属性,名称,标准,环境,培训,属性,模块,对象,函数,定义,变量,内置函数dir可用于列出某模块中定义了哪些属性(全局名称空间)python之使用inspect模块
python之使用inspect模块,异常,信息,名字,代码,培训,资料,价值,方法,参数,模块,inspect模块提供了一系列函数用于帮助使用自省。下面仅列出较python操作系统接口模块:OS
python操作系统接口模块:OS,管理,工作,工具,系统,服务,培训,模块,文件,目录,函数,OS模块提供了很多与操作系统进行交互的函数,比如常见的使用函Python性能分析
Python性能分析,代码,分析,对比,时间,工具,标准,注释,跨行,通用,报告,python标准库提供两个代码性能分析相关的模块,即timeit和cProfile/profiPython之logging模块重定向
Python之logging模块重定向,信息,标准,时间,培训,网络,实时,工程,较大,代码,地方,对于代码量较大的工程,建议使用logging模块进行输出。该模块Python算法定义
Python算法定义,有限,时间,数据,算法,情况,培训,系统,策略,复杂度,步骤,算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的