当前位置: 首页 > 后端技术 > Python

在Python中使用枚举类,仅此一个理由就够了!

时间:2023-03-25 23:04:57 Python

枚举类在Java中并不陌生,本文将解释为什么在Python中要使用枚举类。想象一个问题,如果在项目中处理通过RestAPI请求返回的JSON数据,其中一种数据格式如下:{metrics:'speed',value:20,weekday:'Mon'}你需要处理数据,放入字符将字符串类型的星期几转换成数值类型的1、2、3、4、5、6、7应该怎么做?Mon=1Tue=2Wed=3Thu=4Fri=5Sat=6Sun=7通过定义常量来预定义一对一的映射关系。如果你有一点Python开发经验,大部分都会选择字典的形式来解决:weekday={'Mon':1'Tue':2'Wed':3'Thu':4'Fri':5'Sat':6'Sun':7}通过键值获取对应的数值。不过我在另一篇文章(FromBronzetoKing,一篇教你节省90%内存)中介绍过,Python中的字典是一种非常耗内存的数据存储方式。如果你看了我的文章,你可能会有很多新的想法,比如用class方法实现枚举关系,classWeekday:Mon=1Tue=2Wed=3Thu=4Fri=5Sat=6Sun=7但是,以上方法在数据持久化和可扩展性方面都不是最理想的方案。如果你有一定的Java开发经验,遇到这样的问题,你一定会第一时间想到一个概念——枚举类。enumWeekday{MON(1,"星期一"),TUE(2,"星期二"),WED(3,"星期三"),THU(4,"星期四"),FRI(5,"星期五"),SAT(6,"星期六"),SUN(7,"星期六");publicfinalintint值;publicfinal字符串中文;Weekday(intintValue,Stringchinese){this.intValue=intValue;this.chinese=中文;}}通过下面的方法,你可以访问枚举类中的值,publicclassApp{publicstaticvoidmain(String[]args){Weekdayday=Weekday.MON;System.out.println(day.intValue);System.out.println(day.chinese);}}Java中的枚举类具有安全、标准化等诸多优点,因此非常流行。那么,Python中是否可以使用枚举类来解决类似的枚举问题呢?答案是肯定的。Python中提供了一个标准的枚举库,调用继承即可实现Python枚举类。有两种方法可以实现这一点。方法一:类继承#demo.pyfromenumimportEnumclassWeekday(Enum):Mon=1Tue=2Wed=3Thu=4Fri=5Sat=6Sun=7print(Weekday)print(Weekday.Mon)print(Weekday.Mon.value)看输出,$pythondemo.pyWeekday.Mon1方法二:定义变量当每次枚举的值都是递增的且不重要时,可以使用常量名作为string直接调用Enum类,Weekday=Weekday('Weekday',['Mon','Tue','Wed','Thu','Fri','Sat','Sun'])forname,memberinWeekday.__members__.items():print(name,member,member.value)下面,看看输出,$pythondemo.py('Mon',,1)('Tue',,2)('Wed',,3)('Thu',,4)('Fri',,5)('Sat',,6)('Sun',,7)我们也可以在下面访问对应日期的值way,sunday=Weekday.Sun.value此时枚举类的使用说明编辑。Python是一种相对简单的编程语言。这里所谓的简单就是容易上手。如果你真的想成为一个高级的Python开发者,你有很多书本上没有的知识。就像本文讲解的枚举类一样,也许你可以通过定义常量和使用字典来解决这个问题。但是,在遇到枚举问题时,使用这些入门级的方法会大大降低代码的效率和可读性。因此,在遇到需求时,不应将功能的实现作为最终目标,而应将实现高性能的系统作为最终追求。记得看过雷军的采访,他曾经提到自己写的代码就像诗一样,虽然网上有很多关于他这句话的笑话。不过,我觉得这是程序员应该有的追求,也是大多数程序员做不到的。以上就是本次分享的全部内容。觉得文章还不错的话,请关注公众号:Python编程学习圈,每日干货分享,发送“J”还能收到海量学习资料,涵盖Python电子书和教程,数据库编程、Django、爬虫、云计算等。或者去编程学习网了解更多编程技术知识。