Python學習:列舉型別
阿新 • • 發佈:2018-11-27
一、Python中的列舉
Python中的列舉是作為一個類存在的,通常列舉類用來存放的同一狀態,同一維度下的變數。這是與其他語言的一個較為鮮明的特徵,總結它的用法特點如下:
- Python列舉作為一個類存在,使用它需要首先匯入列舉模組,然後繼承並自定義需要的列舉類;
- 匯入列舉模組可以是Enum(列舉值可以是任意型別),也可以是IntEnum(列舉值只能是整型);
- 列舉類不允許存在相同的標籤;但是允許不同標籤的列舉值相同,這樣後者相當於前者別名;
- 不同的列舉型別,即使列舉名和列舉值都一樣,比較結果也是False
- 列舉類的值不可以被外界更改
使用列舉類的情況:例如訂單狀態有1,2,3,但是你直接寫到程式碼裡order.status == 1這樣別人看你的程式碼看不懂的,不如你建立一個列舉類,將1和訂單未支付這兩個關聯上,如果是用dict的話方法每次都用get會比較麻煩,而且特性一少很多,並且dict裡邊value型別也不一定是理想的,很多不確定性吧
二、Python列舉的基本用法
定義一個列舉型別如下:
#第一步:匯入列舉類
from enum import Enum
#第二步:通過繼承的方式,定義一個適合我們使用的列舉類
#列舉的名字一般都大寫
#繼承Enum後列舉值可以是字串也可以是整型,如果IntEnum則必須整型
class PeopleStatus(Enum):
Male = 0
Female = 1
mood = "good"
1. 列印列舉資訊
#1.1列印列舉型別,得到的是一個列舉型別 print(PeopleStatus.Male) #列印結果:<PeopleStatus.Male: 0> #1.2列印列舉名,得到的是一個字串 print(PeopleStatus.Male.name) #列印結果:'Male' print(PeopleStatus.mood.name) #列印結果:'mood' #1.3.列印列舉值 print(PeopleStatus.mood.value) #列印結果:'good' #1.4.測試列舉值不可更改,否則報錯 #PeopleStatus.mood = 'nb' #1.5.通過列舉名稱獲取列舉 PeopleStatus['mood'] 列印結果:<PeopleStatus.mood: 'good'>
2. 遍歷列舉
#2.1.由於BLUE與BLUE_ALIAS列舉值相同,BLUE_ALIAS相當於BLUE的別名,所以沒有被打印出來 for value in PeopleStatus: print(value) 列印結果: PeopleStatus.Male PeopleStatus.Female PeopleStatus.mood #2.2.可以打印出所有的列舉值包括別名,使用__members__ for value in PeopleStatus.__members__: print(value) 列印結果: Male Female mood #2.3打印出列舉的所有資訊,得到是元組 for value in PeopleStatus.__members__.items(): print(value) 執行結果如下: ('Male', <PeopleStatus.Male: 0>) ('Female', <PeopleStatus.Female: 1>) ('mood', <PeopleStatus.mood: 'good'>)
3. 列舉的比較
#3.1兩個列舉值可以做等值比較
result1 = PeopleStatus.Female == PeopleStatus.Male
print(result1) #列印false
result2 = PeopleStatus.mro == PeopleStatus.mood
print(result2) #列印false
#3.2另一種比較
result2_1 = PeopleStatus.mro is PeopleStatus.mood
print(result2_1) #列印:false
#3.3兩個列舉值不支援大小比較
#result3 = PeopleStatus.Female > PeopleStatus.Male
#print(result3) #列印:報錯
#3.4:列舉值和對應值比較,並不相等
result4 = PeopleStatus.Female == 1
print(result4) #列印 False
4. 列舉別名
不同標籤但是列舉值相同,後者是前者別名
5. 列舉轉換
通過具體值得到列舉型別
num = 1
print(PeopleStatus(num))
#輸出:PeopleStatus.Female
三、列舉的特殊用法
建立一個列舉:列舉值只能是整型且不允許設定別名
from enum import IntEnum,unique
#列舉類的的特殊使用
@unique
class Grade(IntEnum):
Heigh = 1
#Heigh_Alias = 2 #報錯重複值,設定unique後,不能設定別名
medium = 2
Low = 3
#Lower = "Lower" #報錯,因為繼承IntEnum,所以列舉值只能是Int