Python基礎-23枚舉

23 枚舉

? ? 枚舉是一組符號名稱(枚舉成員)的集合,枚舉成員應該是唯一的、不可變的。

成都創新互聯公司是一家專業提供南岸企業網站建設,專注與網站設計、網站建設、HTML5、小程序制作等業務。10年已為南岸眾多企業、政府機構等服務。創新互聯專業網絡公司優惠進行中。

23.1 使用普通類實現枚舉類

class basicWeek():
    SUN=0
    MON=1
    TUE=2
    WED=3
    THU=4
    FRI=5
    SAT=6

# 獲取值
print(basicWeek.SUN) # 0

? ? 雖然這樣也可以實現,但不嚴謹,也不安全,原因如下所示:

  • 枚舉類中,不允許存在相同的枚舉項(類變量)
  • 不允許在類外面直接修改枚舉項的值
class basicWeek():
    SUN=0
    MON=1
    TUE=2
    WED=3
    THU=4
    FRI=5
    SAT=6
    SUN=7 # 這里會覆蓋前面已經定義的值

# 獲取值
print(basicWeek.SUN) # 7
# 在外面修改值
basicWeek.SUN=99
# 再次獲取的值為修改后的值
print(basicWeek.SUN) # 99

? ? 為了解決這種問題,我們引入枚舉類

23.2 枚舉類

? ? 在Python中使用枚舉類,可以引入內置模塊Enum,如下所示:

from enum import Enum

class EnumWeek(Enum):
    SUN = 0
    MON=1
    TUE=2
    WED=3
    THU=4
    FRI=5
    SAT=6

print(EnumWeek.SUN) # EnumWeek.SUN
print(type(EnumWeek.SUN)) # <enum 'EnumWeek'>
print(EnumWeek.SUN.value) # 0
print(EnumWeek(5)) # EnumWeek.FRI
print(type(EnumWeek.SUN.value)) # <class 'int'>
print(EnumWeek.SUN.value == 0) # True
print(EnumWeek.SUN == EnumWeek2.SUN) # False
print(EnumWeek.SUN == EnumWeek.SUN) # True
print(EnumWeek.SUN is EnumWeek2.SUN) # False
print(EnumWeek.SUN is EnumWeek.SUN) # True

? ? 使用枚舉類注意事項如下所示:

  • 枚舉類不能用來實例化對象
  • 訪問枚舉類中的項,直接使用類名.訪問項,如EnumWeek.SUN
  • 枚舉類中定義的key=value,在類外部不允許修改
  • 枚舉類可以用來==、is來進行比較
  • 枚舉類允許有多個名稱作為某個相同值的別名
from enum import Enum

class EnumWeek(Enum):
    SUN = 0
    MON=1
    TUE=2
    WED=3
    THU=4
    FRI=5
    SAT=0

print(EnumWeek.SAT) # EnumWeek.SUN
  • 如果不允許枚舉類出現相同值的時,可以使用裝飾器@unique
from enum import Enum,unique

@unique
class EnumWeek(Enum):
    SUN = 0
    MON=1
    TUE=2
    WED=3
    THU=4
    FRI=5
    SAT=0

? ? 輸出結果如下所示:

Traceback (most recent call last):
  File "C:\Users\admin\Documents\PyCharmProjects\MyPythonProjects\LearningCode\LearningEnum.py", line 4, in <module>
    class EnumWeek(Enum):
  File "D:\Program Files\Python\lib\enum.py", line 1013, in unique
    raise ValueError('duplicate values found in %r: %s' %
ValueError: duplicate values found in <enum 'EnumWeek'>: SAT -> SUN
  • 使用自動設定的值
from enum import Enum,unique,auto

@unique
class EnumWeek(Enum):
    SUN = auto()
    MON=auto()
    TUE=auto()
    WED=auto()
    THU=auto()
    FRI=auto()
    SAT=auto()

print(EnumWeek.SAT.value) # 7
print(EnumWeek.WED.value) # 4
  • 枚舉類是允許迭代的
from enum import Enum,unique,auto

@unique
class EnumWeek(Enum):
    SUN = auto()
    MON=auto()
    TUE=auto()
    WED=auto()
    THU=auto()
    FRI=auto()
    SAT=auto()

for week in EnumWeek:
    print(f"week is {week}:{week.value}")

? ? 輸出結果如下所示:

week is EnumWeek.SUN:1
week is EnumWeek.MON:2
week is EnumWeek.TUE:3
week is EnumWeek.WED:4
week is EnumWeek.THU:5
week is EnumWeek.FRI:6
week is EnumWeek.SAT:7

原文地址:https://www.jianshu.com/p/391cd

本文同步在微信訂閱號上發布,如各位小伙伴們喜歡我的文章,也可以關注我的微信訂閱號:woaitest,或掃描下面的二維碼添加關注:

本文名稱:Python基礎-23枚舉
新聞來源:http://m.kartarina.com/article48/dsogihp.html

成都網站建設公司_創新互聯,為您提供網站策劃品牌網站建設虛擬主機網頁設計公司手機網站建設移動網站建設

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都網頁設計公司
主站蜘蛛池模板: 亚洲精品无码AV人在线播放| 亚洲成av人片不卡无码| 色情无码WWW视频无码区小黄鸭| 国产亚洲AV无码AV男人的天堂| 无码av免费毛片一区二区| 无码综合天天久久综合网| 久久午夜无码鲁丝片午夜精品| 十八禁无码免费网站| 亚洲毛片av日韩av无码| 加勒比无码一区二区三区| 久久久久亚洲AV成人无码| 曰韩无码AV片免费播放不卡| 免费A级毛片无码A∨免费| 国精品无码一区二区三区在线| 国产午夜鲁丝片AV无码免费| 18禁网站免费无遮挡无码中文| 亚洲欧洲日产国码无码久久99| 精品无码国产AV一区二区三区| 精品无码AV一区二区三区不卡 | 国产午夜无码片免费| 无码熟妇人妻AV在线影院| 免费无码看av的网站| 亚洲AV日韩AV永久无码色欲| 亚洲精品无码Av人在线观看国产| 精品无码国产污污污免费网站国产 | 亚洲精品无码专区2| 中文字幕无码高清晰| 日韩国产精品无码一区二区三区| 狠狠噜天天噜日日噜无码| 无码国内精品久久人妻麻豆按摩 | 久久水蜜桃亚洲av无码精品麻豆 | 精品久久久久久久无码久中文字幕| 无码一区二区三区| 久久久久久无码Av成人影院| 日韩人妻无码精品久久免费一| 少妇人妻无码精品视频| 日韩精品无码一区二区三区不卡 | 亚洲精品无码mⅴ在线观看| 久久亚洲日韩看片无码| 无码粉嫩小泬无套在线观看| 精品欧洲av无码一区二区 |