成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

Python 的枚舉類(lèi)型

wall2flower / 3535人閱讀

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

起步

Python 的原生類(lèi)型中并不包含枚舉類(lèi)型。為了提供更好的解決方案,Python 通過(guò) PEP 435 在 3.4 版本中添加了 enum 標(biāo)準(zhǔn)庫(kù)。

枚舉類(lèi)型可以看作是一種標(biāo)簽或是一系列常量的集合,通常用于表示某些特定的有限集合,例如星期、月份、狀態(tài)等。在沒(méi)有專(zhuān)門(mén)提供枚舉類(lèi)型的時(shí)候我們是怎么做呢,一般就通過(guò)字典或類(lèi)來(lái)實(shí)現(xiàn):

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

class Color:
    RED   = 1
    GREEN = 2
    BLUE  = 3

這種來(lái)實(shí)現(xiàn)枚舉如果小心翼翼地使用當(dāng)然沒(méi)什么問(wèn)題,畢竟是一種妥協(xié)的解決方案。它的隱患在于可以被修改。

使用 Enum

更好的方式是使用標(biāo)準(zhǔn)庫(kù)提供的 Enum 類(lèi)型,官方庫(kù)值得信賴(lài)。3.4 之前的版本也可以通過(guò) pip install enum 下載支持的庫(kù)。簡(jiǎn)單的示例:

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

枚舉成員有值(默認(rèn)可重復(fù)),枚舉成員具有友好的字符串表示:

>>> print(Color.red)
Color.red
>>> print(repr(Color.red))

>>> type(Color.red)

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

枚舉類(lèi)型不可實(shí)例化,不可更改。

定義枚舉

定義枚舉時(shí),成員名不允許重復(fù)

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

成員值允許相同,第二個(gè)成員的名稱(chēng)被視作第一個(gè)成員的別名

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  在通過(guò)值獲取枚舉成員時(shí),只能獲取到第一個(gè)成員

若要不能定義相同的成員值,可以通過(guò) unique 裝飾

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

可以通過(guò)成員名來(lái)獲取成員也可以通過(guò)成員值來(lái)獲取成員:

print(Color["red"])  # Color.red  通過(guò)成員名來(lái)獲取成員

print(Color(1))      # Color.red  通過(guò)成員值來(lái)獲取成員

每個(gè)成員都有名稱(chēng)屬性和值屬性:

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

支持迭代的方式遍歷成員,按定義的順序,如果有值重復(fù)的成員,只獲取重復(fù)的第一個(gè)成員:

for color in Color:
    print(color)

特殊屬性 __members__ 是一個(gè)將名稱(chēng)映射到成員的有序字典,也可以通過(guò)它來(lái)完成遍歷:

for color in Color.__members__.items():
    print(color)          # ("red", )
枚舉比較

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

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

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

枚舉成員不能進(jìn)行大小比較:

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

IntEnumEnum 的擴(kuò)展,不同類(lèi)型的整數(shù)枚舉也可以相互比較:

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
總結(jié)

enum 模塊功能很明確,用法也簡(jiǎn)單,其實(shí)現(xiàn)的方式也值得學(xué)習(xí),有機(jī)會(huì)的話可以看看它的源碼。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/42782.html

相關(guān)文章

  • PyTips 0x17-Python枚舉類(lèi)型

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

    yedf 評(píng)論0 收藏0
  • 別再說(shuō)Python沒(méi)有枚舉類(lèi)型了,好好看看

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

    zsy888 評(píng)論0 收藏0
  • Python入門(mén)細(xì)節(jié)

    摘要:入門(mén)細(xì)節(jié)相除后的類(lèi)型雙斜杠是整除,出來(lái)的類(lèi)型是。序列,集合和字典屬于組,是的基本數(shù)據(jù)類(lèi)型。變量名區(qū)分大小寫(xiě)。盡量避免循環(huán)引入。變量函數(shù)等引入內(nèi)指定的變量函數(shù)等。中如果沒(méi)有出現(xiàn)模塊名也是絕對(duì)導(dǎo)入。頂級(jí)包與入口文件的位置 python入門(mén)細(xì)節(jié) 相除后的類(lèi)型 type(2/2) float type(2//2) int 雙斜杠是整除,出來(lái)的類(lèi)型是int。單斜杠的出來(lái)的是float類(lèi)型。 進(jìn)制...

    microcosm1994 評(píng)論0 收藏0
  • python模塊之enum_上

    摘要:模塊定義了種枚舉類(lèi)裝飾器助手在中加入創(chuàng)建枚舉注意點(diǎn)枚舉值可以是任何類(lèi)型,如果值不重要可以使用自動(dòng)選擇。使用裝飾器可以對(duì)枚舉值進(jìn)行唯一約束枚舉專(zhuān)用的類(lèi)裝飾器。序列化一般要求序列化的枚舉要定義在模塊頂層,因?yàn)榉葱蛄谢竺杜e能夠從模塊導(dǎo)入。 enum模塊定義了: 4種枚舉類(lèi):Enum, IntEnum, Flag, IntFlag 裝飾器:unique() 助手:auto Flag, ...

    kelvinlee 評(píng)論0 收藏0
  • python:基礎(chǔ)知識(shí)

    摘要:與字符串不同,列表元素支持改寫(xiě)。元組比列表更加安全,因?yàn)椴荒苄薷募弦粋€(gè)功能是進(jìn)行集合操作,另一個(gè)功能是消除重復(fù)的元素。 基本數(shù)據(jù)類(lèi)型 數(shù)字 整型,浮點(diǎn)型,布爾型,復(fù)數(shù) 組 序列,集合,字典 1 組 # 序列-字符串 str 不可變類(lèi)型 # 序列-列表 list [1,2,3,4,5,6,as] 可變類(lèi)型 # 序列-元組 tuple (1,2,3,4,5,6,as) 不可變類(lèi)型 ...

    xiongzenghui 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<