在Python中使用枚举类型

2020-06-07 01:51:10

Blog Jto联系如何使用枚举来管理呈现有限状态集的数据。

枚举类型(枚举)是唯一值的集合。例如,分层列表,S层最好,然后是A、B、C、D和F:

使用IntEnum对象比使用Int更容易,因为IntEnum允许您为值编写助记符:

我正在处理的数据具有少量状态(例如,通过或失败)。

数据的顺序不适用于字符串(例如,层列表中的";A";之前的";S";)。

数据可以表示为一组布尔标志(例如,Zilog Z80微处理器的标志寄存器)。

导入随机导入集合Test=枚举.Enum(";测试";,[";通过";,";失败";])row=lambda:[Random.Choice(List(Test)),Random.Choice([";Bobby";,";Linda";,";John";])data=[row()for_in range(10)]data。

[[<;Test.Pass:1&>,&39;John&39;],[<;Test.Pass:1&>,&39;Bobby&39;],[<;Test.Fail:2&>,&39;Linda&39;],[<;Test.Fail:2<;,&39;Bobby&39;],[<;Test.Fail:2<;,';Bobby&39;],[<;Test.Fail:2<;,';Bobby&39;],[<;Test.Fail:2<;,';Bobby&39;]。],[<;Test.Pass:1>;,';Bobby&39;],[<;Test.Pass:1&>;,';Linda&39;],[<;Test.Pass:1&>,&39;Bobby&39;],[<;Test.Pass:1&>;,';Bobby&39;],[<;Test.Pass:1>;,&39;Bobby&39;],[<;Test.Pass:1&>;,&39;Bobby&39;],[<;Test.Pass:1&>

导入随机导入集合Tier=枚举.IntEnum(";Tier";,[";S";,";A";,";B";,";C";,";D";,";F";])data_tiers=随机选择(List(Tier),k=9)Data_Names=[";Mario&。Samus";,";Yoshi&34;,";Kirby";,";Fox";,";Pikachu";,";Ness";,";Luigi";]data=list(zip(data_tiers,data_ames))data。

[(<;Tier.B:3&>,';Mario&39;),(<;Tier.A:2&>,';Link&39;),(<;Tier.F:6&>,&39;Samus#39;),(<;Tier.B:3&>,';Yoshi&39;),(<;Tier.F:6;#39;Samus&39;),(<;Tier.B:3&>,';Yoshi&39;),(<;Tier.F:6&>,';Samus&39;)。),(<;Tier.D:5&>,';Fox&39;),(<;Tier.A:2&>,';Pikachu&39;),(<;Tier.S:1&>,';Ness&39;),(<;Tier.A:2&>,';Luigi&39;)]。

等级=层的集合.defaultdict(集合),数据中的名称:等级[等级].添加(名称)等级中的等级:名称=排序(等级[等级])打印(f";{tier.name}-层:{';,';.join(名称)}";)。

为Z80_Flag中的标志导入随机状态=0:#50%的概率p为True。p=随机()<;0.5,如果p:STATE|=FLAGATE STATE。

对于Z80_Flag中的标志:IF STATE&;FLAG:STATUS=";#";ELSE:STATUS=";.";PRINT(f";{flag.name:16}{status}";)。

Z80=枚举.Flag(";Z80";,[";进位";,";减去";,";奇偶校验";,";零奇偶校验";])IntZ80=枚举.IntFlag(";IntZ80";,[";进位";,";减去";,";奇偶校验";,

Enum和IntEnum表示不能组合的状态。FLAG和IntFlag表示可以组合的状态。

在本周的帖子中,您学习了如何使用枚举来管理具有有限状态集的数据。枚举允许您对数据进行自定义排序,并使用Flag和IntFlag表示状态的组合。

如果你喜欢这周的帖子,那就和你的朋友们分享吧,敬请关注下周的帖子。到时见!