Python枚举

来源:互联网 发布:成都网络视听大会盛典 编辑:程序博客网 时间:2024/05/16 06:18

1、枚举的定义
2、枚举取值
3、迭代器
4、枚举比较
1、枚举的定义
  1. 首先,定义枚举要导入enum模块。
  2. 枚举定义用class关键字,继承Enum类。
  3. 用于定义枚举的class和定义类的class是有区别【下一篇博文继续分享】。
  示例代码:
from enum import Enum
class Color(Enum):
red = 1
orange = 2
yellow = 3
green = 4
代码分析:
1、上面的代码,我们定义了颜色的枚举Color.
2、颜色枚举有7个成员,分别是Color.red、Color.orange、Color.yellow等。
3、每一个成员都有它们各自名称和值,Color.red成员的名称是:red,值是:1。
4、每个成员的数据类型就是它所属的枚举。【*注:用class定义的类,实际上就是一种类型】

1.1、定义枚举时,成员名称不允许重复   
from enum import Enum
class Color(Enum):
red = 1
red = 2
  上面的代码,就无法执行。提示错误:TypeError: Attempted to reuse key: 'red'

1.2、默认情况下,不同的成员值允许相同。但是两个相同值的成员,第二个成员的名称被视作第一个成员的别名
from enum import Enum
class Color(Enum):
red = 1
red_alias = 1
  成员Color.red和Color.red_alias具有相同的值,那么成员Color.red_alias的名称red_alias就被视作成员Color.red名称red的别名。

 1.3、如果枚举中存在相同值的成员,在通过值获取枚举成员时,只能获取到第一个成员
from enum import Enum
class Color(Enum):
red = 1
red_alias = 1
print(Color(1))
  输出结果为:Color.red

1.4、如果要限制定义枚举时,不能定义相同值的成员。可以使用装饰器@unique【要导入unique模块】
from enumimport Enum, unique
@uniqueclass Color(Enum):
red = 1
red_alias = 1
再执行就会提示错误:ValueError: duplicate values found in : 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、枚举支持迭代器,可以遍历枚举成员
for colorin Color:
print(color)
  输出结果是,枚举的所有成员。Color.red、Color.orange、Color.yellow、Color.green、Color.blue、Color.indigo、Color.purple。

3.2、如果枚举有值重复的成员,循环遍历枚举时只获取值重复成员的第一个成员
from enumimport Enum
class Color(Enum):
red = 1
orange = 2
yellow = 3
green = 4
red_alias = 1for color in Color:print(color)
   输出结果是:Color.red、Color.orange、Color.yellow、Color.green、Color.blue、Color.indigo、Color.purple。但是Color.red_alias并没有出现在输出结果中。

3.3、如果想把值重复的成员也遍历出来,要用枚举的一个特殊属性__members__
from enumimport Enum
class Color(Enum):
red = 1
orange = 2
yellow = 3
green = 4
red_alias = 1
for colorin Color.__members__.items():
print(color)
  输出结果:('red', )、('orange', )、('yellow', )、('green', )、('blue', )、
('indigo', )、('purple', )、('red_alias', )

4、枚举比较
4.1、枚举成员可进行同一性比较
Color.redis Color.red
  输出结果是:True
Color.redisnot 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

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 泡沫砖设备价格 泡沫保温板设备价格 泡沫砖生产设备价格 塑料泡沫图片 泡沫加气混凝土设备 聚氨酯泡沫填缝剂生产设备 泡沫清洗机 小型泡沫砖机 泡沫砖机多少钱一台 泡沫造坨机 泡沫再生颗粒机 泡沫回收造粒机 泡沫热熔机 泡沫融化机 泡沫回收机 泡沫造粒机厂家 洗车泡沫机 废旧泡沫化坨机 泡沫造粒机多少钱一台 泡沫颗粒机价格 泡沫机 聚苯乙烯泡沫板材 泡沫板多少钱一平方 泡沫板图片 泡沫板有毒吗 泡沫板船 防火泡沫板 泡沫板手工 10公分厚泡沫板价格 生产泡沫板 2公分泡沫板价格 聚乙烯泡沫板厂家 珍珠棉泡沫板 5公分泡沫保温板多少钱一平方 铁皮泡沫隔热板 闭孔泡沫板厂家 泡沫陶瓷保温板 地暖泡沫板价格 防火酚醛泡沫板 保温泡沫板 泡沬板