Python - 列舉



Python 中的列舉

在 Python 中,術語列舉指的是為一組字串分配固定常量值的過程,以便每個字串都可以透過與其繫結的值來識別。包含在enum模組(它是 Python 標準庫的一部分)中的 Enum 類用作父類來定義一組識別符號的列舉 - 通常以大寫形式編寫。

示例

在下面的程式碼中,“subjects”是列舉。它具有不同的列舉成員,每個成員都是列舉類 subjects 的物件。這些成員具有 name 和 value 屬性。

# importing enum 
from enum import Enum

class subjects(Enum):
   ENGLISH = 1
   MATHS = 2
   SCIENCE = 3
   SANSKRIT = 4

obj = subjects.MATHS
print (type(obj))

它產生以下輸出 -

<enum 'subjects'> 

列舉類不能具有相同的成員出現兩次,但是,多個成員可以分配相同的值。要確保每個成員都綁定了唯一的值,請使用@unique裝飾器。

示例

在此示例中,我們使用 @unique 裝飾器來限制重複。

from enum import Enum, unique

@unique
class subjects(Enum):
   ENGLISH = 1
   MATHS = 2
   GEOGRAPHY = 3
   SANSKRIT = 2

這將引發如下所示的異常 -

   @unique
    ^^^^^^
   raise ValueError('duplicate values found in %r: %s' %
ValueError: duplicate values found in <enum 'subjects'>: SANSKRIT -> MATHS

Enum 類是一個可呼叫類,因此您可以使用其建構函式來建立列舉。此建構函式接受兩個引數,它們是列舉的名稱和一個由空格分隔的列舉成員符號名稱組成的字串。

示例

以下是定義列舉的另一種方法 -

from enum import Enum
subjects = Enum("subjects", "ENGLISH MATHS SCIENCE SANSKRIT")
print(subjects.ENGLISH)
print(subjects.MATHS)
print(subjects.SCIENCE)
print(subjects.SANSKRIT)

此程式碼將給出以下輸出 -

subjects.ENGLISH
subjects.MATHS
subjects.SCIENCE
subjects.SANSKRIT

訪問列舉中的模式

可以以兩種模式訪問列舉類的成員 -

  • - 在此模式下,使用“value”關鍵字後跟列舉類的物件來訪問列舉成員的值。

  • 名稱 - 同樣,我們使用“name”關鍵字來訪問列舉成員的名稱。

示例

以下示例說明了如何訪問列舉成員的值和名稱。

from enum import Enum

class subjects(Enum):
   ENGLISH = "E"
   MATHS = "M"
   GEOGRAPHY = "G"
   SANSKRIT = "S"
   
obj = subjects.SANSKRIT
print(type(obj))
print(obj.name)
print(obj.value)

它將產生以下輸出 -

<enum 'subjects'> 
SANSKRIT
S

遍歷列舉

您可以使用for迴圈按其在定義中出現的順序遍歷列舉成員。

示例

以下示例顯示瞭如何使用 for 迴圈遍歷列舉 -

from enum import Enum

class subjects(Enum):
   ENGLISH = "E"
   MATHS = "M"
   GEOGRAPHY = "G"
   SANSKRIT = "S"

for sub in subjects:
   print (sub.name, sub.value)

它將產生以下輸出 -

ENGLISH E
MATHS M
GEOGRAPHY G
SANSKRIT S

我們知道列舉成員可以使用分配給它的唯一值或其 name 屬性來訪問。因此,subjects("E") 以及 subjects["ENGLISH"] 都返回 subjects.ENGLISH 成員。

廣告