最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中的枚舉類型示例介紹

 更新時間:2019年01月09日 09:15:14   作者:棲遲于一丘  
這篇文章主要給大家介紹了關(guān)于Python中枚舉類型的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

起步

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

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

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

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

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

使用 Enum

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

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

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

>>> print(Color.red)
Color.red
>>> print(repr(Color.red))
<Color.red: 1>
>>> type(Color.red)
<Enum 'Color'>
>>> isinstance(Color.green, Color)
True

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

定義枚舉

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

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 'Color'>: blue -> red

枚舉取值

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

print(Color['red']) # Color.red 通過成員名來獲取成員

print(Color(1))  # Color.red 通過成員值來獲取成員

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

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

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

for color in Color:
 print(color)

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

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

枚舉比較

枚舉的成員可以通過 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

IntEnum 是 Enum 的擴展,不同類型的整數(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 模塊功能很明確,用法也簡單,其實現(xiàn)的方式也值得學(xué)習(xí),有機會的話可以看看它的源碼。

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

最新評論

南华县| 高淳县| 漳浦县| 临汾市| 忻州市| 南投市| 周口市| 阿拉尔市| 中山市| 丽水市| 浦北县| 保定市| 叙永县| 中超| 竹溪县| 珲春市| 云林县| 民丰县| 蓝山县| 澄江县| 通山县| 元江| 兰西县| 两当县| 扬中市| 塔河县| 岱山县| 三门峡市| 贵港市| 莆田市| 惠水县| 柯坪县| 泸州市| 高平市| 安平县| 洛隆县| 大冶市| 双鸭山市| 邯郸县| 江油市| 临泉县|