Python枚举

关于枚举

对于一些既定的值,不允许随意赋值的值,每个成员的数据类型就是它所属的枚举,自定义的类(枚举),又叫自定义数据类型;在定义枚举时我们需要导入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操作









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值