枚舉類型enum是比較重要的一個數據類型,它是一種數據類型而不是數據結構,我們通常將一組常用的常數聲明成枚舉類型方便后續的使用。當一個變量有幾種可能的取值的時候,我們將它定義為枚舉類型。在Python中是如何實現的呢?
補充:很多初學者一下子不明白枚舉是什么意思,比如我們有段程序很多地方需要用到12個月月份,可以將每個月份都定義出來使用: String Jan = "1月份",但是這樣用起來很不好用,需要寫12個,然后后續用的時候也不清晰明白,那么枚舉類型就可以解決問題,它將這12個月份羅列出來,然后每個月份對應一個值(從0到...),我們用的時候可以直接用聲明的枚舉類型帶出來我們想要的值。
我們聲明一個月份的枚舉類型。
>>> 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>, ',', 1) ('Feb', '=>', <Month.Feb: 2>, ',', 2) ('Mar', '=>', <Month.Mar: 3>, ',', 3) ('Apr', '=>', <Month.Apr: 4>, ',', 4) ('May', '=>', <Month.May: 5>, ',', 5) ('Jun', '=>', <Month.Jun: 6>, ',', 6) ('Jul', '=>', <Month.Jul: 7>, ',', 7) ('Aug', '=>', <Month.Aug: 8>, ',', 8) ('Sep', '=>', <Month.Sep: 9>, ',', 9) ('Oct', '=>', <Month.Oct: 10>, ',', 10) ('Nov', '=>', <Month.Nov: 11>, ',', 11) ('Dec', '=>', <Month.Dec: 12>, ',', 12)
首先導入enum模塊,然后聲明枚舉類型名及它的可能取值。還有一種方式我們定義Enum子類來定義一個枚舉類。
>>> from enum import Enum,unique >>> @unique class Weekday(Enum): Sun = 0 Mon = 1 Tue = 2 Wed = 3 Thu = 4 Fri = 5 Sat = 6
@unique這個裝飾器是幫我們檢查是否有重復的值。取出枚舉類型里面的值也是多種多樣的。
>>> print(Weekday.Fri)
Weekday.Fri
>>> print(Weekday(2))
Weekday.Tue
>>> a = Weekday(2)
>>> print a
Weekday.Tue
>>>
從最后一個也可以看出定義枚舉類和定義普通的類是有區別的,開頭也說了枚舉類型就是一組常量,我們就是為了以后方便使用將一組可能取值的常量放到一個地方,根據需要將值取出來。