关于枚举
对于一些既定的值,不允许随意赋值的值,每个成员的数据类型就是它所属的枚举,自定义的类(枚举),又叫自定义数据类型;在定义枚举时我们需要导入enum模块,利用class关键字,继承Enum类,在定义枚举时,有几点是需要我们注意的:
1.定义枚举时,成员名称不允许重复
例如:
from enum import Enum class Color(Enum): red = 1 red = 2
像这样执行系统会抛异常
2. 默认不同的成员值允许相同,但是两个相同值的成员,第二个成员的名称被视作第一个成员的别名,如果枚举中存在相同值的成员,在通过值获取枚举成员时,只能获取到第一个成员
例1:
from enum import Enum class Color(Enum): red = 1 yellow= 1 orange = 2 print(Color(1))
结果:
Color.red
进程已结束,退出代码0
系统输出了值为1的red,却没有输出同样值为1的yellow,这里系统已经默认了yellow为red的别名
如果要限制定义枚举时,不能定义相同值的成员。可以使用装饰器@unique
这里需要导入unique模块:
from enum import Enum, unique @unique
在导入了unique模块以后,我们再执行例1的代码就会抛异常,因为例1中red与yellow有相同的值为1,我们只需要给yellow一个其它不重复的值就好了
#usr/bin/python #-*-coding:utf-8-*- from enum import Enum, unique @unique class Color(Enum): red = 1 yellow= 11 orange = 2 print(Color(1))
枚举取值
① 通过成员的名称来获取成员
print(Color['orange'])
结果:
Color.orange
②通过成员值来获取成员
print(Color(1))
结果:
Color.red
③通过成员,来获取它的名称和值
find_color=Color.orange print('名称:',find_color.name) print('值:',find_color.value)
结果:
名称: orange
值: 2
迭代
枚举支持迭代器,可以遍历枚举成员
for color in Color: print(color)
结果:
Color.red
Color.yellow
Color.orange
如果枚举有值重复的成员,循环遍历枚举时只获取值重复成员的第一个成员
结果不变,不能遍历到red1
如果想把值重复的成员也遍历出来,要用枚举的一个特殊属性__members__
for color in Color.__members__.items(): print(color)
枚举比较
①枚举成员可进行同一性比较
print(Color.red is Color.red1) print(Color.red is not Color.yellow)
结果:
True
True
②枚举成员可进等值比较
print(Color.red==Color.red1) print(Color.red!=Color.red1)
结果:
True
False
③枚举成员不能进行大小比较,其值可以进行大小比较
print(Color.red.value<Color.yellow.value)
结果:
True
枚举的作用,一是让数值看起来更直观,二是圈定一个范围,数值被限定在这个范围中。
1.如果一个变量你需要几种可能存在的值,那么就可以被定义成为枚举类型。之所以叫枚举就是说将变量或者叫对象可能存在的情况也可以说是可能的值一一例举出来
2.枚举变量中的枚举元素系统是按照常量来处理的,故叫枚举常量,他们是不能进行普通的算术赋值的,但是你可以在声明的时候进行赋值操作
3.这里要特别注意的一点是,如果你不进行元素赋值操作那么元素将会被系统自动从0开始自动递增的进行赋值操作,如果你只定义了第一个那么系统将对下一个元素进行前一个元素的值加1操作