1. 程式人生 > >人生苦短之Python枚舉類型enum

人生苦短之Python枚舉類型enum

12個 nbsp clas 變量 highlight 是什麽 說了 人生苦短 問題

枚舉類型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
>>>

從最後一個也可以看出定義枚舉類和定義普通的類是有區別的,開頭也說了枚舉類型就是一組常量,我們就是為了以後方便使用將一組可能取值的常量放到一個地方,根據需要將值取出來。

人生苦短之Python枚舉類型enum