python3.6-枚举-20180525

一、什么是枚举:

1.定义枚举要导入enum模块
2.枚举定义用class关键字继承Enum类
用于定义枚举的class和定义类的class是有区别

from enum import Enum
class Color(Enum):
    red = 1
    blue = 2
    yellow = 3
    pink = 4
print(Color.red)

注意: 

    首先要导入enum模块,注意大小写,class类中,继承Enum类;

    枚举出成员,有各自不同的名称和值,一定要不同!!

    每个成员的名称是Color.red,Color.blue.....


1.定义枚举时,成员名不允许重复:

from enum import Enum

class
Color(Enum): red = 1 red = 2 #提示错误:TypeError: Attempted to reuse key: 'red' 代码不能执行

2.默认状态下,不同成员值允许相同,但是第二个成员被视为第一个成员的别名

from enum import Enum

class
Color(Enum): red = 1 red_alias = 1 #red_alias就被视作成员Color.red名称red的别名 ,只获取第一个

print(Color(1))   #Color.red


3.限制定义枚举,导入@unique装饰器后,不能定义相同值的成员

from enum import Enum,unique

@unique
class Color(Enum):
    red = 1
    red_other = 1    #此处值相同,报错ValueError: duplicate values found in <enum 'Color'>: red_other -> red
    blue = 2
    yellow = 3
    pink = 4

二、获取枚举值

2.1 通过成员的名称来获取成员

Color['red']

2.2 通过成员值来获取成员

Color(2)

2.3 通过成员,来获取它的名称和值

red_member = Color.red
red_member.name
red_member.value




三、迭代器

3.1 枚举支持迭代器,可以遍历枚举成员

for c in Color:
    print(c, end=' ')

#  打印结果 Color.red  Color.orange  Color.yellow 


3.2 如果枚举有值重复的成员,循环遍历枚举时只获取值重复成员的第一个成员

from enum import Enum

class Color(Enum):
    red = 1
    red_other = 1
    blue = 2
    yellow = 3
    pink = 4

for c in Color:
    print(c,end='  ')

# 打印结果 Color.red   Color.blue   Color.yellow   Color.pink    并不会打印red_other


3.3 如果想把值重复的成员也遍历出来,要用枚举的一个特殊属性__members__

注意:__members__和__members__.items()都不会报错,但打印结果略有不同

比较一:__members__.items()

class Color(Enum):
    red = 1
    red_other = 1
    blue = 2
    yellow = 3
    pink = 4

for c in Color.__members__.items():
    print(c,end='  ')

# 打印结果 ('red', <Color.red: 1>)  ('red_other', <Color.red: 1>)  ('blue', <Color.blue: 2>)  ('yellow', <Color.yellow: 3>)  ('pink', <Color.pink: 4>)  


比较二:__members__

for c in Color.__members__:
    print(c,end='  ')

# 打印结果 red  red_other  blue  yellow  pink    此时不会出值,只有名称



四、枚举的比较

4.1 枚举成员可进行同一性比较

Color.red is Color.red

  输出结果是:True

Color.red is not Color.blue

  输出结果是:True

4.2 枚举成员可进等值比较

Color.blue == Color.red

  输出结果是:False

Color.blue != Color.red

  输出结果是:True

4.3 枚举成员不能进行大小比较

Color.red < Color.blue

  输出结果出错:TypeError: unorderable types: Color() < Color()




参考链接:https://www.cnblogs.com/ucos/p/5896861.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值