首頁  >  文章  >  後端開發  >  什麼是枚舉python

什麼是枚舉python

silencement
silencement原創
2019-06-22 10:38:063150瀏覽

什麼是枚舉python

枚舉類型可以看作是一種標籤或是一系列常數的集合,通常用來表示某些特定的有限集合,例如星期、月份、狀態等。 Python 的原生類型(Built-in types)裡並沒有專門的枚舉類型,但是我們可以透過很多方法來實現它,例如字典、類別等:

WEEKDAY = {
  'MON': 1,
  'TUS': 2,
  'WEN': 3,
  'THU': 4,
  'FRI': 5
  }
  class Color:
  RED = 0
  GREEN = 1
  BLUE = 2

上面兩種方法可以看做是簡單的枚舉類型的實現,如果只在局部範圍內用到了這樣的枚舉變數是沒有問題的,但問題在於它們都是可變的(mutable),也就是說可以在其它地方被修改從而影響其正常使用:

WEEKDAY['MON'] = WEEKDAY['FRI']
  print(WEEKDAY)
  {'FRI': 5, 'TUS': 2, 'MON': 5, 'WEN': 3, 'THU': 4}
  通过类定义的枚举甚至可以实例化,变得不伦不类:
  c = Color()
  print(c.RED)
  Color.RED = 2
  print(c.RED)
  0
  2

當然也可以使用不可變類型(immutable),例如元組,但是這樣就失去了枚舉類型的本意,將標籤退化為無意義的變數:

COLOR = ('R', 'G', 'B')
  print(COLOR[0], COLOR[1], COLOR[2])
  R G B

為了提供更好的解決方案,Python 透過PEP 435 在3.4 版本中新增了enum 標準函式庫,3.4 之前的版本也可以透過pip install enum 下載相容支援的函式庫。 enum 提供了Enum/IntEnum/unique 三個工具,用法也非常簡單,可以透過繼承Enum/IntEnum 定義枚舉類型,其中IntEnum 限定枚舉成員必須為(或可以轉化為)整數類型,而unique 方法可以作為修飾器限定枚舉成員的值不可重複:

from enum import Enum, IntEnum, unique 
     try:
  @unique
  class WEEKDAY(Enum):
  MON = 1
  TUS = 2
  WEN = 3
  THU = 4
  FRI = 1
  except ValueError as e:
  print(e)
  duplicate values found in : FRI -> MON
  try:
  class Color(IntEnum):
  RED = 0
  GREEN = 1
  BLUE = 'b'
  except ValueError as e:
  print(e)
  invalid literal for int() with base 10: 'b'

以上是什麼是枚舉python的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn