<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
列舉是與多個唯一常數繫結的一組符號
因為列舉表示的是常數,建議列舉元名用大寫
IntEnum 便於進行系統互動
from enum import Enum class Color(Enum): RED = 1 GREEN = 2 BLUE = 3 print(Color.RED) # Color.RED print(repr(Color.RED)) # <Color.RED: 1> print(type(Color.RED)) # <enum 'Color'> print(isinstance(Color.GREEN, Color)) # True print(Color.RED.name) # RED
from enum import Enum class Shake(Enum): VANILLA = 7 CHOCOLATE = 4 COOKIES = 9 MINT = 3 for shake in Shake: print(shake) # Shake.VANILLA # Shake.CHOCOLATE # Shake.COOKIES # Shake.MINT
__members__ 列出 name 和成員
from enum import Enum class Shape(Enum): SQUARE = 2 DIAMOND = 1 CIRCLE = 3 ALIAS_FOR_SQUARE = 2 for name, member in Shape.__members__.items(): print(name, member) # SQUARE Shape.SQUARE # DIAMOND Shape.DIAMOND # CIRCLE Shape.CIRCLE # ALIAS_FOR_SQUARE Shape.SQUARE
列舉元可雜湊,可用於字典和集合
from enum import Enum class Color(Enum): RED = 1 GREEN = 2 BLUE = 3 apples = {} apples[Color.RED] = 'red delicious' apples[Color.GREEN] = 'granny smith' print(apples) # {<Color.RED: 1>: 'red delicious', <Color.GREEN: 2>: 'granny smith'}
from enum import Enum class Color(Enum): RED = 1 GREEN = 2 BLUE = 3 # 通過值存取 print(Color(1)) # Color.RED print(Color(3)) # Color.BLUE # 通過name存取 print(Color['RED']) # Color.RED print(Color['GREEN']) # Color.GREEN # 存取成員的name或value print(Color.RED.name) # RED print(Color.RED.value) # 1
裝飾器 @unique
from enum import Enum, unique @unique class Mistake(Enum): ONE = 1 TWO = 2 THREE = 3 FOUR = 3 # ValueError: duplicate values found in <enum 'Mistake'>: FOUR -> THREE
如果列舉值不重要,可以用 auto(), 預設從 1 開始
from enum import Enum, auto class Color(Enum): RED = auto() BLUE = auto() GREEN = auto() print(Color(1)) # Color.RED print(list(Color)) # [<Color.RED: 1>, <Color.BLUE: 2>, <Color.GREEN: 3>]
Enum
from enum import Enum class Color(Enum): RED = 1 BLUE = 2 GREEN = 3 print(Color.RED is Color.RED) # True print(Color.RED is Color.BLUE) # False print(Color.RED is not Color.BLUE) # True try: Color.RED < Color.BLUE # Enum不支援直接排序 except Exception as e: print(e) # '<' not supported between instances of 'Color' and 'Color' print(Color.BLUE == Color.RED) # Fasle print(Color.BLUE != Color.RED) # True print(Color.BLUE == Color.BLUE) # True print(Color.BLUE == 2) # False
IntEnum
from enum import IntEnum class Color(IntEnum): RED = 1 BLUE = 2 GREEN = 3 # IntEnum可直接排序 print(Color.RED < Color.BLUE) # True print(Color.BLUE == 2) # True
from enum import Enum class Animal(Enum): ANT = 1 BEE = 2 CAT = 3 DOG = 4 Animal = Enum('Animal', 'ANT BEE CAT DOG') # 同上 print(Animal) # <enum 'Animal'> print(Animal.ANT) # <Animal.ANT: 1> print(Animal.ANT.value) # 1 print(list(Animal)) # [<Animal.ANT: 1>, <Animal.BEE: 2>, <Animal.CAT: 3>, <Animal.DOG: 4>]
除了不可以直接和 Enum 比較,其他都類似整數
from enum import Enum, IntEnum class Color(Enum): RED = 1 GREEN = 2 class Shape(IntEnum): CIRCLE = 1 SQUARE = 2 class Request(IntEnum): POST = 1 GET = 2 print(Shape.CIRCLE == Color.RED) # False print(Shape == 1) # False print(Shape.CIRCLE == 1) # True print(Shape.CIRCLE == Request.POST) # True print(int(Shape.CIRCLE)) # 1 print(['a', 'b', 'c'][Shape.CIRCLE]) # b print([i for i in range(Shape.SQUARE)]) # [0, 1]
類似 int,IntFlag 成員使用按位元運運算元得到的結果仍然是 IntFlag 成員
IntFlag 和 Enum 的一個區別在於,如果沒有設定任何標誌(值為 0),則其布林值為 False
from enum import IntFlag class Perm(IntFlag): R = 4 # 讀 W = 2 # 寫 X = 1 # 執行 print(Perm.R | Perm.W) # <Perm.R|W: 6> print(Perm.R + Perm.W) # 6 RW = Perm.R | Perm.W print(Perm.R in RW) # True
from enum import IntFlag class Perm(IntFlag): R = 4 # 讀 W = 2 # 寫 X = 1 # 執行 RWX = 7 # 讀寫執行 print(Perm.RWX) # <Perm.RWX: 7> print(~Perm.RWX) # <Perm.-8: -8> print(Perm.R & Perm.X) # <Perm.0: 0> print(bool(Perm.R & Perm.X)) # False print(Perm.X | 8) # <Perm.8|X: 9>
from enum import Flag, auto class Color(Flag): BLACK = 0 RED = auto() BLUE = auto() GREEN = auto() WHITE = RED | BLUE | GREEN print(Color.RED & Color.GREEN) # <Color.0: 0> print(bool(Color.RED & Color.GREEN)) # False print(Color.WHITE) # <Color.WHITE: 7> print(Color.BLACK) # <Color.BLACK: 0> print(bool(Color.BLACK)) # False
知識點
不支援同名
以上就是一文帶你瞭解Python列舉類enum的使用的詳細內容,更多關於Python列舉類enum的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45