枚举类在Java中并不生疏,本文就来解说一下为什么要在Python中利用枚举类。

试想一个问题,如果你在我的项目中解决通过Rest API申请回来的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}

通过键值的形式去取对应的数值型值。

然而,我在另外一篇文章中(从青铜到王者,一文教你节俭90%内存占用)介绍过,Python中字典是一种十分占用内存的数据存储形式。

如果读过我的那篇文章,可能会产生很多新的想法,例如,用类的形式去实现枚举关系,

class Weekday:  Mon = 1  Tue = 2  Wed = 3  Thu = 4  Fri = 5  Sat = 6  Sun = 7

然而,上述这些形式在数据长久化扩展性方面并不是最现实的解决方案。

如果有肯定的Java开发教训,面对这样的问题,必定会马上想起一个概念--枚举类

enum Weekday {    MON(1, "星期一"),    TUE(2, "星期二"),    WED(3, "星期三"),    THU(4, "星期四"),    FRI(5, "星期五"),    SAT(6, "星期六"),    SUN(7, "星期七");    publicfinalint intValue;    publicfinal String chinese;    Weekday(int intValue, String chinese) {        this.intValue = intValue;        this.chinese = chinese;    }}

通过上面形式,就能够拜访枚举类中的值,

publicclass App {    public static void main(String[] args) {        Weekday day = Weekday.MON;        System.out.println(day.intValue);        System.out.println(day.chinese);    }}

Java中枚举类具备泛滥劣势,例如,平安、标准,使得它备受欢送。

那么,Python中是否也能够应用枚举类解决相似的枚举问题?

答案是必定的。

Python中提供了规范的enum库,通过对它的调用和继承,就能够实现Python枚举类。

实现形式有2种。

形式1:类继承

# demo.pyfrom enum import Enumclass Weekday(Enum):  Mon = 1  Tue = 2  Wed = 3  Thu = 4  Fri = 5  Sat = 6  Sun = 7  print(Weekday)print(Weekday.Mon)print(Weekday.Mon.value)

输入后果看一下,

$ python demo.py<enum 'Weekday'>Weekday.Mon1

形式2:定义变量

当每个枚举的值是递增、且不重要时,能够应用常量名作为字符串间接调用Enum类,

Weekday = Weekday('Weekday', ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'])for name, member in Weekday.__members__.items():    print(name, member, member.value)

上面,输入后果看一下,

$ python demo.py('Mon', <Weekday.Mon: 1>, 1)('Tue', <Weekday.Tue: 2>, 2)('Wed', <Weekday.Wed: 3>, 3)('Thu', <Weekday.Thu: 4>, 4)('Fri', <Weekday.Fri: 5>, 5)('Sat', <Weekday.Sat: 6>, 6)('Sun', <Weekday.Sun: 7>, 7)

咱们也能够通过上面形式拜访对应日期的值,

sunday = Weekday.Sun.value

到这里,枚举类的应用就解说完了。

Python是一门绝对简略的编程语言,这里所谓的简略是入门简略,真正想成为一名高阶的Python开发者,有很多常识是书籍上都没有的。

就如同本文解说的枚举类,或者你定义常量、应用字典都能够解决这个问题。然而,当遇到枚举问题时,再应用这些入门级的办法,对于代码的效率、可读性都会大打折扣。因而,当遇到一个需要,不应该把实现性能当成最终目标,而是应该把实现高性能零碎当成最终谋求。

我记得看过雷军的一个采访,他曾提到写的代码像诗一样,尽管网络上对他这句话的调侃很多。然而,我认为这是作为程序员应该有的谋求,也是绝大多数程序员做不到的一点。

以上就是本次分享的所有内容,如果你感觉文章还不错,欢送关注公众号:Python编程学习圈,每日干货分享,发送“J”还可支付大量学习材料,内容笼罩Python电子书、教程、数据库编程、Django,爬虫,云计算等等。或是返回编程学习网,理解更多编程技术常识。