欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一文帶你了解Python枚舉類enum的使用

 更新時間:2022年10月26日 15:22:03   作者:XerCis  
枚舉是與多個唯一常量綁定的一組符號,因為枚舉表示的是常量,建議枚舉成員名用大寫 IntEnum 便于進行系統(tǒng)交互。本文將通過一些示例代碼講解Python枚舉類的使用,需要的可以參考一下

簡介

枚舉是與多個唯一常量綁定的一組符號

因為枚舉表示的是常量,建議枚舉成員名用大寫

IntEnum 便于進行系統(tǒng)交互

初試

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'}

訪問成員

  • name:變量名
  • value:值
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 不支持直接排序
  • IntEnum 可直接排序

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

功能性API

官方教程

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>]

IntEnum

官方教程

除了不可以直接和 Enum 比較,其他都類似整數(shù)

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]

IntFlag

官方教程

類似 int,IntFlag 成員使用按位運算符得到的結(jié)果仍然是 IntFlag 成員

IntFlag 和 Enum 的一個區(qū)別在于,如果沒有設置任何標志(值為 0),則其布爾值為 False

from enum import IntFlag


class Perm(IntFlag):
    R = 4  # 讀
    W = 2  # 寫
    X = 1  # 執(zhí)行


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  # 執(zhí)行
    RWX = 7  # 讀寫執(zhí)行


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>

Flag

官方教程

  • Flag 與 IntFlag 類似,成員可使用按位運算符進行組合,但不可與其他 Flag 或 int 組合
  • 推薦用 auto() 作為值
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的使用的詳細內(nèi)容,更多關(guān)于Python枚舉類enum的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 用Python編寫個解釋器實現(xiàn)方法接受

    用Python編寫個解釋器實現(xiàn)方法接受

    計算機只能理解機器碼。歸根結(jié)底,編程語言只是一串文字,目的是為了讓人類更容易編寫他們想讓計算機做的事情。真正的魔法是由編譯器和解釋器完成,它們彌合了兩者之間的差距。解釋器逐行讀取代碼并將其轉(zhuǎn)換為機器碼
    2023-01-01
  • python進行二次方程式計算的實例講解

    python進行二次方程式計算的實例講解

    在本篇內(nèi)容里小編給大家整理了一篇關(guān)于python進行二次方程式計算的實例講解內(nèi)容,有興趣的朋友們可以學習下。
    2020-12-12
  • python如何每天在指定時間段運行程序及關(guān)閉程序

    python如何每天在指定時間段運行程序及關(guān)閉程序

    這篇文章主要介紹了python如何每天在指定時間段運行程序及關(guān)閉程序問題,具有很好的參考價值,希望對大家有所幫助。
    2023-04-04
  • 分享python中matplotlib指定繪圖顏色的八種方式

    分享python中matplotlib指定繪圖顏色的八種方式

    這篇文章主要給大家分享的是python中matplotlib指定繪圖顏色的八種方式,在使用matplotlib的pyplot庫進行繪圖時,經(jīng)常會發(fā)現(xiàn)各種開源代碼指定“color”的方式并不一致,下面就向大家展示8種指定color的方式,需要的朋友可以參考一下
    2022-03-03
  • Pycharm遠程調(diào)試原理及具體配置詳解

    Pycharm遠程調(diào)試原理及具體配置詳解

    這篇文章主要介紹了Pycharm遠程調(diào)試原理及具體配置詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • python運用sklearn實現(xiàn)KNN分類算法

    python運用sklearn實現(xiàn)KNN分類算法

    這篇文章主要為大家詳細介紹了python運用sklearn實現(xiàn)KNN分類算法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Python編寫一個趣味問答小游戲

    Python編寫一個趣味問答小游戲

    隨著六一兒童節(jié)的到來,我們可以為孩子們編寫一個有趣的小游戲,讓他們在游戲中學習有關(guān)六一兒童節(jié)的知識。本文將介紹如何用Python編寫一個六一兒童節(jié)問答小游戲及趣味比賽,需要的可以參考一下
    2023-06-06
  • 用Python監(jiān)控你的朋友都在瀏覽哪些網(wǎng)站?

    用Python監(jiān)控你的朋友都在瀏覽哪些網(wǎng)站?

    今天教各位小伙伴一個黑科技,用Python監(jiān)控你的朋友都在瀏覽哪些網(wǎng)站,文中有非常詳細的介紹,對正在學習python的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • pytest實戰(zhàn)技巧之參數(shù)化基本用法和多種方式

    pytest實戰(zhàn)技巧之參數(shù)化基本用法和多種方式

    本文介紹了pytest參數(shù)化的基本用法和多種方式,幫助讀者更好地使用這個功能,同時,還介紹了一些高級技巧,如動態(tài)生成參數(shù)名稱、參數(shù)化的組合和動態(tài)生成參數(shù)化裝飾器,幫助讀者更靈活地使用參數(shù)化,感興趣的朋友參考下吧
    2023-12-12
  • ubuntu 16.04下python版本切換的方法

    ubuntu 16.04下python版本切換的方法

    這篇文章主要為大家詳細介紹了ubuntu 16.04下python版本切換的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06

最新評論