国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Python 的枚舉類型

wall2flower / 3470人閱讀

摘要:起步的原生類型中并不包含枚舉類型。枚舉類型可以看作是一種標簽或是一系列常量的集合,通常用于表示某些特定的有限集合,例如星期月份狀態等。簡單的示例枚舉成員有值默認可重復,枚舉成員具有友好的字符串表示枚舉類型不可實例化,不可更改。

起步

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

>>> type(Color.red)

>>> isinstance(Color.green, Color)
True

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

定義枚舉

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

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 : blue -> red
枚舉取值

可以通過成員名來獲取成員也可以通過成員值來獲取成員:

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", )
枚舉比較

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

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

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

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

Color.red < Color.blue    # TypeError: unorderable types: Color() < Color()
擴展枚舉 IntEnum

IntEnumEnum 的擴展,不同類型的整數枚舉也可以相互比較:

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 < 3)             # True
print(Shape.circle == Request.post) # True
print(Shape.circle >= Request.post) # True
總結

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42782.html

相關文章

  • PyTips 0x17-Python枚舉類型

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

    yedf 評論0 收藏0
  • 別再說Python沒有枚舉類型了,好好看看

    摘要:枚舉類型可以看作是一種標簽或是一系列常量的集合,通常用于表示某些特定的有限集合,例如星期月份狀態等。 showImg(https://segmentfault.com/img/remote/1460000018679998?w=740&h=728); 枚舉類型可以看作是一種標簽或是一系列常量的集合,通常用于表示某些特定的有限集合,例如星期、月份、狀態等。 Python 的原生類型(Bu...

    zsy888 評論0 收藏0
  • Python入門細節

    摘要:入門細節相除后的類型雙斜杠是整除,出來的類型是。序列,集合和字典屬于組,是的基本數據類型。變量名區分大小寫。盡量避免循環引入。變量函數等引入內指定的變量函數等。中如果沒有出現模塊名也是絕對導入。頂級包與入口文件的位置 python入門細節 相除后的類型 type(2/2) float type(2//2) int 雙斜杠是整除,出來的類型是int。單斜杠的出來的是float類型。 進制...

    microcosm1994 評論0 收藏0
  • python模塊之enum_上

    摘要:模塊定義了種枚舉類裝飾器助手在中加入創建枚舉注意點枚舉值可以是任何類型,如果值不重要可以使用自動選擇。使用裝飾器可以對枚舉值進行唯一約束枚舉專用的類裝飾器。序列化一般要求序列化的枚舉要定義在模塊頂層,因為反序列化要求枚舉能夠從模塊導入。 enum模塊定義了: 4種枚舉類:Enum, IntEnum, Flag, IntFlag 裝飾器:unique() 助手:auto Flag, ...

    kelvinlee 評論0 收藏0
  • python:基礎知識

    摘要:與字符串不同,列表元素支持改寫。元組比列表更加安全,因為不能修改集合一個功能是進行集合操作,另一個功能是消除重復的元素。 基本數據類型 數字 整型,浮點型,布爾型,復數 組 序列,集合,字典 1 組 # 序列-字符串 str 不可變類型 # 序列-列表 list [1,2,3,4,5,6,as] 可變類型 # 序列-元組 tuple (1,2,3,4,5,6,as) 不可變類型 ...

    xiongzenghui 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<