在python中枚舉是一種類(Enum,IntEnum),存放在enum模塊中。枚舉類型可以給一組標簽賦予一組特定的值。
枚舉的特點:
- 枚舉類中不能存在相同的標簽名
- 枚舉是可迭代的
- 不同的枚舉標簽可以對應相同的值,但它們都會被視為該值對應第一個標簽的別名
- 如果要限制定義枚舉時,不能定義相同值的成員。可以使用裝飾器@unique【要導入unique模塊】
- 枚舉成員之間不能進行大小比較,可進行等值和同一性比較
- 枚舉成員為單例,不可實例化,不可更改
在開始前,我們先定義一個枚舉類:
from enum import Enum class Vip(Enum): MONDAY = 0 TUESDAY = 1 WEDNESDAY = 2 THURSDAY = 3 FRIDAY = 4 SATURDAY = 5 SUNDAY = 6
示例一:獲取在枚舉類中定義的枚舉成員
# 方法一: print(Vip.MONDAY) print(type(Vip.MONDAY)) # 方法二 print(Vip['TUESDAY']) print(type(Vip.TUESDAY)) # 方法三 print(Vip(2)) print(type(Vip(2))) ------------------- Vip.MONDAY <enum 'Vip'> Vip.TUESDAY <enum 'Vip'> Vip.WEDNESDAY <enum 'Vip'>
示例二:枚舉成員中包含標簽名和該標簽對應的值
today = Vip.FRIDAY print('Today is ' + today.name + '. The number of today is ' + str(today.value)) ---------------------------------------- Today is FRIDAY. The number of today is 4
示例三:包含相同值的枚舉類的迭代,默認情況下不會輸出別名,但可通過迭代__members__來顯示所有成員標簽
from enum import Enum class Week(Enum): MONDAY = 0 TUESDAY = 1 FRIDAY = 4 TODAY = 4 # 以FRIDAY別名的形式存在 for day in Week: print(day) print('******************') for day in Week.__members__: print(day) ---------------------- Week.MONDAY Week.TUESDAY Week.FRIDAY ****************** MONDAY TUESDAY FRIDAY TODAY
示例四:限定不含相同值的枚舉類@unique
from enum import Enum, unique @unique class Week(Enum): MONDAY = 0 TUESDAY = 1 FRIDAY = 4 TODAY = 4 -------------------------------------- ValueError: duplicate values found in <enum 'Week'>: TODAY -> FRIDAY