一.列舉其實是一個類
建議標識名字用大寫
1.列舉類:
from enum import Enum class VIP(Enum): YELLOW = 1 GREEN = 2 BLACK = 3 RED = 4 print(VIP.YELLOW) #VIP.YELLOW #關注的是它的標簽不是數字
2 列舉和普通類相比的優勢
三種其他的普通方法表示列舉:
(1) yellow = 1 green = 2 (2)字典的表示方式 {'yellow':1,'green':2} (3)類的表示方式 class TypeDiamond(): yellow = 1 green = 2
這些方式,它們都是可變的,可以在代碼中輕易的更改值,且沒有防止相同標簽的功能,
3.列舉的特點:
from enum import Enum class VIP(Enum): YELLOW = 1 #YELLOW= 2 #不可重復,報錯 BLACK = 3 RED = 4 print(VIP.YELLOW) #VIP.YELLOW = 6 #不可更改,報錯
二.列舉型別、列舉名稱與列舉值
1.獲取列舉型別下某一數值:
from enum import Enum class VIP(Enum): YELLOW = 1 GREEN = 2 BLACK = 3 RED = 4 print(VIP.YELLOW.value) print(VIP.YELLOW.name) print(VIP.YELLOW) print(VIP['YELLOW']) #1 #列舉值 #YELLOW #<class 'str'> 獲取標簽名 #VIP.YELLOW #<enum 'VIP'> 列舉型別 #VIP.YELLOW
2.列舉是可以遍歷的:
from enum import Enum class VIP(Enum): YELLOW = 1 GREEN = 2 BLACK = 3 RED = 4 for v in VIP : print(v) #VIP.YELLOW VIP.GREEN VIP.BLACK VIP.RED
三. 列舉的比較運算
1.兩個列舉之間可以使用等值比較(==),列舉與數值比較的判斷結果不對,兩個列舉之間不能進行大小比較,
2.支持is操作:
result = VIP.GREEN is VIP.GREEN #True
3.兩個大類之間也可以進行等值比較,不過結果是False:
from enum import Enum class VIP(Enum): YELLOW = 1 GREEN = 2 BLACK = 3 RED = 4 class VIP1(Enum): YELLOW = 1 GREEN = 2 BLACK = 3 RED = 4 print(VIP.GREEN ==VIP1.GREEN) #False
四.列舉注意事項
1.列舉的數值可以相同,在這種情況下,將第二種列舉型別看成別名,遍歷時不會列印別名:
class VIP(Enum): YELLOW = 1 GREEN = 1 #別名,不會報錯 BLACK = 3 RED = 4 print(VIP.GREEN) #VIP.YELLOW
2.把別名加入遍歷回圈:
(1) for v in VIP.__members__.items() : print(v) #('YELLOW', <VIP.YELLOW: 1>) #('GREEN', <VIP.GREEN: 1>) #('BLACK', <VIP.BLACK: 3>) #('RED', <VIP.RED: 4>) (2) 或者遍歷__members__: for v in VIP.__members__: print(v) #YELLOW #GREEN #BLACK #RED
五.列舉轉換
1.在資料庫里一般存盤數值或者標簽名字來代表列舉型別,推薦存盤數值,數字占用的空間更小,但是不建議在代碼種用數值代表列舉,可讀性不強,
2.如何將數字轉換成列舉型別:
from enum import Enum a = 1 class VIP(Enum): YELLOW = 1 GREEN = 2 BLACK = 3 RED = 4 print(VIP(a)) #轉換列舉型別 #VIP.YELLOW
六.列舉小結
1.要求每個列舉型別都是數字的時候繼承IntEnum:
from enum import IntEnum class VIP(IntEnum): YELLOW = 1 GREEN = 2 BLACK = 3 RED = 4
2.限制不同的列舉型別不能取相同的值:
from enum import Enum from enum import IntEnum,unique @unique #裝飾器 class VIP(IntEnum): YELLOW = 1 GREEN = 2 BLACK = 3 RED = 4
列舉型別不能實體化,屬于單例模式
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/197782.html
標籤:Python
上一篇:PHP7開啟OPcache和Swoole哪個提升更大?性能的提升對比
下一篇:Python3(九) 閉包
