搜尋
首頁後端開發Python教學Python中枚舉類型的詳解(程式碼範例)

本篇文章帶給大家的內容是關於Python中枚舉類型的詳解(程式碼範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

Python 的原生類型中並不包含枚舉類型。為了提供更好的解決方案,Python 透過 PEP 435 在 3.4 版本中加入了 enum 標準函式庫。

枚舉類型可以看作是一種標籤或是一系列常數的集合,通常用於表示某些特定的有限集合,例如星期、月份、狀態等。在沒有專門提供枚舉類型的時候我們是怎麼做呢,一般就透過字典或類別來實現:

Color = {
    'RED'  : 1,
    'GREEN': 2,
    'BLUE' : 3,
}
class Color:
    RED   = 1
    GREEN = 2
    BLUE  = 3

這種來實現枚舉如果小心翼翼地使用當然沒什麼問題,畢竟是一種妥協的解決方案。它的隱憂在於可以被修改。

使用 Enum

更好的方式是使用標準函式庫提供的 Enum 類型,官方函式庫值得信賴。 3.4 之前的版本也可以透過 pip install enum 下載支援的函式庫。簡單的範例:

from enum import Enum
class Color(Enum):
    red = 1
    green = 2
    blue = 3

枚舉成員有值(預設可重複),而枚舉成員具有友善的字串表示:

>>> print(Color.red)
Color.red
>>> print(repr(Color.red))
<color.red:>
>>> type(Color.red)
<enum>
>>> isinstance(Color.green, Color)
True</enum></color.red:>

枚舉類型不可實例化,不可變更。

定義枚舉

定義枚舉時,成員名稱不允許重複

class Color(Enum):
    red = 1
    green = 2
    red = 3    # TypeError: Attempted to reuse key: 'red'

成員值允許相同,第二個成員的名稱被視為第一個成員的別名

class Color(Enum):
    red   = 1
    green = 2
    blue  = 1

print(Color.red)              # Color.red
print(Color.blue)             # Color.red
print(Color.red is Color.blue)# True
print(Color(1))               # Color.red  在通过值获取枚举成员时,只能获取到第一个成员

若要無法定義相同的成員值,可以透過unique 裝飾

from enum import Enum, unique
@unique
class Color(Enum):
    red   = 1
    green = 2
    blue  = 1  # ValueError: duplicate values found in <enum>: blue -> red</enum>

#枚舉取值

可以透過成員名稱來取得成員也可以透過成員值來取得成員:

print(Color['red'])  # Color.red  通过成员名来获取成员

print(Color(1))      # Color.red  通过成员值来获取成员

每個成員都有名稱屬性和值屬性:

member = Color.red
print(member.name)   # red
print(member.value)  # 1

支援迭代的方式遍歷成員,依定義的順序,如果有值重複的成員,只取得重複的第一個成員:

for color in Color:
    print(color)

特殊屬性__members__ 是一個將名稱對應到成員的有序字典,也可以透過它來完成遍歷:

for color in Color.__members__.items():
    print(color)          # ('red', <color.red:>)</color.red:>

#枚舉比較

枚舉的成員可以透過is 同一性比較或透過== 等值比較:

Color.red is Color.red
Color.red is not Color.blue

Color.blue == Color.red
Color.blue != Color.red

枚舉成員不能進行大小比較:

Color.red <p><strong>#擴充枚舉IntEnum</strong></p><p>IntEnum 是Enum 的擴展,不同類型的整數枚舉也可以互相比較:</p><pre class="brush:php;toolbar:false">from enum import IntEnum
class Shape(IntEnum):
    circle = 1
    square = 2

class Request(IntEnum):
    post = 1
    get = 2

print(Shape.circle == 1)            # True
print(Shape.circle = Request.post) # True

總結

enum 模組功能很明確,用法也簡單,其實現的方式也值得學習,有機會的話可以看看它的源碼。

#

以上是Python中枚舉類型的詳解(程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:segmentfault。如有侵權,請聯絡admin@php.cn刪除
您如何切成python陣列?您如何切成python陣列?May 01, 2025 am 12:18 AM

Python列表切片的基本語法是list[start:stop:step]。 1.start是包含的第一個元素索引,2.stop是排除的第一個元素索引,3.step決定元素之間的步長。切片不僅用於提取數據,還可以修改和反轉列表。

在什麼情況下,列表的表現比數組表現更好?在什麼情況下,列表的表現比數組表現更好?May 01, 2025 am 12:06 AM

ListSoutPerformarRaysin:1)DynamicsizicsizingandFrequentInsertions/刪除,2)儲存的二聚體和3)MemoryFeliceFiceForceforseforsparsedata,butmayhaveslightperformancecostsinclentoperations。

如何將Python數組轉換為Python列表?如何將Python數組轉換為Python列表?May 01, 2025 am 12:05 AM

toConvertapythonarraytoalist,usEthelist()constructororageneratorexpression.1)intimpthearraymoduleandcreateanArray.2)USELIST(ARR)或[XFORXINARR] to ConconverTittoalist,請考慮performorefformanceandmemoryfformanceandmemoryfformienceforlargedAtasetset。

當Python中存在列表時,使用數組的目的是什麼?當Python中存在列表時,使用數組的目的是什麼?May 01, 2025 am 12:04 AM

choosearraysoverlistsinpythonforbetterperformanceandmemoryfliceSpecificScenarios.1)largenumericaldatasets:arraysreducememoryusage.2)績效 - 臨界雜貨:arraysoffersoffersOffersOffersOffersPoostSfoostSforsssfortasssfortaskslikeappensearch orearch.3)testessenforcety:arraysenforce:arraysenforc

說明如何通過列表和數組的元素迭代。說明如何通過列表和數組的元素迭代。May 01, 2025 am 12:01 AM

在Python中,可以使用for循環、enumerate和列表推導式遍歷列表;在Java中,可以使用傳統for循環和增強for循環遍歷數組。 1.Python列表遍歷方法包括:for循環、enumerate和列表推導式。 2.Java數組遍歷方法包括:傳統for循環和增強for循環。

什麼是Python Switch語句?什麼是Python Switch語句?Apr 30, 2025 pm 02:08 PM

本文討論了版本3.10中介紹的Python的新“匹配”語句,該語句與其他語言相同。它增強了代碼的可讀性,並為傳統的if-elif-el提供了性能優勢

Python中有什麼例外組?Python中有什麼例外組?Apr 30, 2025 pm 02:07 PM

Python 3.11中的異常組允許同時處理多個異常,從而改善了並發方案和復雜操作中的錯誤管理。

Python中的功能註釋是什麼?Python中的功能註釋是什麼?Apr 30, 2025 pm 02:06 PM

Python中的功能註釋將元數據添加到函數中,以進行類型檢查,文檔和IDE支持。它們增強了代碼的可讀性,維護,並且在API開發,數據科學和圖書館創建中至關重要。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。