欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中的枚舉類型示例介紹

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

起步

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

枚舉類型可以看作是一種標(biāo)簽或是一系列常量的集合,通常用于表示某些特定的有限集合,例如星期、月份、狀態(tài)等。在沒(méi)有專門提供枚舉類型的時(shí)候我們是怎么做呢,一般就通過(guò)字典或類來(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 類型,官方庫(kù)值得信賴。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))
<Color.red: 1>
>>> type(Color.red)
<Enum 'Color'>
>>> isinstance(Color.green, Color)
True

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

定義枚舉

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

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

成員值允許相同,第二個(gè)成員的名稱被視作第一個(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 <enum 'Color'>: 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è)成員都有名稱屬性和值屬性:

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

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

for color in Color:
 print(color)

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

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

枚舉比較

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

IntEnum 是 Enum 的擴(kuò)展,不同類型的整數(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ì)的話可以看看它的源碼。

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

相關(guān)文章

  • 使用Python的matplotlib庫(kù)繪制柱狀圖

    使用Python的matplotlib庫(kù)繪制柱狀圖

    這篇文章主要介紹了使用Python的matplotlib庫(kù)繪制柱狀圖,Matplotlib是Python中最常用的可視化工具之一,可以非常方便地創(chuàng)建海量類型地2D圖表和一些基本的3D圖表,可根據(jù)數(shù)據(jù)集自行定義x,y軸,繪制圖形,需要的朋友可以參考下
    2023-07-07
  • Python 實(shí)現(xiàn)隨機(jī)數(shù)詳解及實(shí)例代碼

    Python 實(shí)現(xiàn)隨機(jī)數(shù)詳解及實(shí)例代碼

    這篇文章主要介紹了Python 實(shí)現(xiàn)隨機(jī)數(shù)詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • 詳解Python中如何寫控制臺(tái)進(jìn)度條的整理

    詳解Python中如何寫控制臺(tái)進(jìn)度條的整理

    這篇文章主要介紹了詳解Python中如何寫控制臺(tái)進(jìn)度條的整理,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • python定時(shí)檢測(cè)無(wú)響應(yīng)進(jìn)程并重啟的實(shí)例代碼

    python定時(shí)檢測(cè)無(wú)響應(yīng)進(jìn)程并重啟的實(shí)例代碼

    這篇文章主要介紹了python定時(shí)檢測(cè)無(wú)響應(yīng)進(jìn)程并重啟的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-04-04
  • Python實(shí)現(xiàn)的爬取百度文庫(kù)功能示例

    Python實(shí)現(xiàn)的爬取百度文庫(kù)功能示例

    這篇文章主要介紹了Python實(shí)現(xiàn)的爬取百度文庫(kù)功能,結(jié)合實(shí)例形式分析了Python針對(duì)百度文庫(kù)的爬取、編碼轉(zhuǎn)換、文件保存等相關(guān)操作技巧,需要的朋友可以參考下
    2019-02-02
  • Python命名空間的本質(zhì)和加載順序

    Python命名空間的本質(zhì)和加載順序

    這篇文章主要介紹了Python命名空間的本質(zhì)和加載順序,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • scrapy框架中的items文件夾的用法詳解

    scrapy框架中的items文件夾的用法詳解

    這篇文章主要介紹了scrapy框架中的items文件夾的用法詳解,在Scrapy框架中,items文件夾是用來(lái)存放定義數(shù)據(jù)模型的Item類的地方,Item類描述了要從網(wǎng)頁(yè)中提取的數(shù)據(jù)的結(jié)構(gòu)和字段,通過(guò)使用Item類,我們可以更方便地組織和處理爬取到的數(shù)據(jù),需要的朋友可以參考下
    2023-10-10
  • Python的裝飾器詳情介紹

    Python的裝飾器詳情介紹

    這篇文章主要介紹了Python的裝飾器詳情,主要介紹裝飾器定以、調(diào)用方式等相關(guān)內(nèi)容,需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助
    2022-03-03
  • python實(shí)現(xiàn)測(cè)試工具(一)——命令行發(fā)送get請(qǐng)求

    python實(shí)現(xiàn)測(cè)試工具(一)——命令行發(fā)送get請(qǐng)求

    這篇文章主要介紹了python如何實(shí)現(xiàn)命令行發(fā)送get請(qǐng)求,幫助大家更好的利用python進(jìn)行測(cè)試工作,感興趣的朋友可以了解下
    2020-10-10
  • 10分鐘用Python快速搭建全文搜索引擎詳解流程

    10分鐘用Python快速搭建全文搜索引擎詳解流程

    讀萬(wàn)卷書(shū)不如行萬(wàn)里路,只學(xué)書(shū)上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章帶你用python花10分鐘迅速搭建一個(gè)好玩的Python全文搜索引擎,大家可以在過(guò)程中查缺補(bǔ)漏,提升水平
    2021-10-10

最新評(píng)論