python列舉型別
阿新 • • 發佈:2020-12-06
什麼是列舉
列舉就是一系列標籤集合,和常量是對等的,但是Python中又沒有嚴格意義的常量,即使大寫也是個變數可以被修改的,所以列舉根據特點可以總結為兩點:
- 標籤對應值不可修改
- 標籤不可重複
列舉怎麼用
在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