1. 程式人生 > 實用技巧 >python列舉型別

python列舉型別

什麼是列舉

列舉就是一系列標籤集合,和常量是對等的,但是Python中又沒有嚴格意義的常量,即使大寫也是個變數可以被修改的,所以列舉根據特點可以總結為兩點:

  1. 標籤對應值不可修改
  2. 標籤不可重複

列舉怎麼用

在Python使用列舉需要從enum模組下匯入Enum

from enum import Enum
Week = Enum("Week", ("Mon", "Tues", "Wed", "Thur", "Fri", "Sat", "Sun"))	# 注意列舉成員是元組

可以利用Enum特殊屬性 __members__for .in遍歷列舉成員,返回是一個字典

for member in Week.__members__.items():
    print(member)

程式輸出

('Mon', <Week.Mon: 1>)
('Tues', <Week.Tues: 2>)
('Wed', <Week.Wed: 3>)
('Thur', <Week.Thur: 4>)
('Fri', <Week.Fri: 5>)
('Sat', <Week.Sat: 6>)
('Sun', <Week.Sun: 7>)

因此,列舉成員的列舉值預設是從0開始的,如果要自定義列舉值,可以自己的列舉類,只需要繼承Enum即可

class Week(Enum):
    Mon = "星期一"
    Tues = "星期二"
    Wed = "星期三"
# 直接類.變數名方式呼叫
print(Week.Mon.value)         # 星期一

列舉的操作

上述舉例可以使用Week.Mon.value可以獲取到列舉值,列舉還有哪些操作

列舉獲取

可以使用name屬性以及成員名稱和成員值來獲取成員

print(Week.Mon.name)         # Mon
print(Week.Mon.value)        # 星期一
print(Week['Mon'])          # Week.Mon
print(Week("星期一"))        # Week.Mon

列舉比較

Week.Mon == Week.Mon
Week.Mon != Week.Wed
Week.Mon is Week.Mon
Week.Mon is not Week.Wed

使用列舉注意事項

類似JAVA強型別語言使用變數和使用列舉效果差不多,但是使用列舉就是為了更容易見名知義,對於強型別語言來說,使用列舉還有另外一個好處就是在呼叫時型別檢查,引數型別是列舉型別

void getDay(Week w){
    # 業務程式碼
}

這樣,強型別語言就不可能傳入其他型別資料進來,但是Python是弱型別語言,引數沒有型別一說,給啥就是啥型別,所以我們在呼叫的時候要注意進行型別的判斷

def get_day(week):
    if isinstance(week, Week):
       pass