枚举类型:在实际问题中,有些变量的值被限定在一个有限的范围内。例如:一个星期有且只有7天,一年有且只有十二个月,一个班每周有6门课程等等。如果把这些量说明为整型、字符串或者其他类型显然是不合适。编程界为此提供了一种称为枚举的类型。在枚举类型定义中列举出所有可能的取值,被说明为该枚举类型的变量取值范围不能超过定义的范围。枚举是一种基本的数据类型,因为它不能再分解为任何基本类型。
python中,一般的会为枚举类型定义一个class类型,然后每个常量都是class的一个唯一的实例。Enum类实现了这个功能:
>>> from enum import Enum >>> Month = Enum('Month',('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec')) >>> for name,member in Month.__members__.items(): ... print(name,',',member,',',member.value) ... Jan , Month.Jan , 1 Feb , Month.Feb , 2 Mar , Month.Mar , 3 Apr , Month.Apr , 4 May , Month.May , 5 Jun , Month.Jun , 6 Jul , Month.Jul , 7 Aug , Month.Aug , 8 Sep , Month.Sep , 9 Oct , Month.Oct , 10 Nov , Month.Nov , 11 Dec , Month.Dec , 12
上面我们定义了一个Month类型的枚举类,然后枚举出它的所有的成员。其中,value属性是自动赋值给成员的int型常量,默认从1开始。
如果需要更精确的控制枚举类型,可以从Enum派生出自定义类,同时利用@unique装饰器帮助我们检查有没有重复值。
>>> from enum import Enum,unique >>> @unique ... class Weekday(Enum): ... Sun = 0 ... Mon = 1 ... Tue = 2 ... Wed = 3 ... Thu = 4 ... Fri = 5 ... Sat = 6 ... >>> day1 = Weekday.Mon >>> day1 <Weekday.Mon: 1> >>> print(day1) Weekday.Mon >>> print(Weekday.Tue) Weekday.Tue >>> print(Weekday['Tue']) Weekday.Tue >>> print(Weekday.Tue.value) 2 >>> day1 == Weekday.Mon True >>> Weekday(1) <Weekday.Mon: 1> >>> Weekday(3) <Weekday.Wed: 3> >>> for name,member in Weekday.__members__.items(): ... print(name,':',member) ... Sun : Weekday.Sun Mon : Weekday.Mon Tue : Weekday.Tue Wed : Weekday.Wed Thu : Weekday.Thu Fri : Weekday.Fri Sat : Weekday.Sat
笑声激发自强,发愤、图强、飞身向上