日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

Python深入淺出分析enum枚舉類_python

作者:Flyme?awei ? 更新時(shí)間: 2022-09-14 編程語言

枚舉類Enum

枚舉類,在企業(yè)開發(fā)中用的比較多

當(dāng)我們需要定義常量時(shí),一個(gè)辦法是用大寫的變量通過整數(shù)來定義,例如月份:

# 當(dāng)項(xiàng)目中需要使用12個(gè)月份時(shí)
JAN = 1
FEB = 2
...
NOV = 11
DEC = 12

但是這樣的定義的類型是 int ,并且仍然是變量,并且在運(yùn)算中,無法時(shí)時(shí)創(chuàng)建對(duì)應(yīng)的值,當(dāng)然這種指代是以更好的方式去使用變量數(shù)值。

這里存在更好的方法是為這樣的枚舉類型定義一個(gè)class類型,然后,每個(gè)常量都是class的一個(gè)唯一實(shí)例。Python提供了 Enum 類來實(shí)現(xiàn)這個(gè)功能。

優(yōu)化如下

# -*- coding: utf-8 -*-
from enum import Enum
# 枚舉中,一個(gè)名字對(duì)應(yīng)一個(gè)值
Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Otc', 'Nov', 'Dec'))

這樣我們就獲得了 Month 類型的枚舉類,可以直接使用 Month.Jan 來引用一個(gè)常量,或者枚舉它的所有成員通過for循環(huán)進(jìn)行取值,

Month.__members__是Month的內(nèi)置變量,可以打印成員標(biāo)簽,

如果在這個(gè)方法調(diào)用上.items()函數(shù)所有成員都打印出來,數(shù)據(jù)類型為元組

for name, member in Month.__members__.items():

? ? print(f'{name} => {member} , {member.value}')+

定義一個(gè)顏色常量枚舉

# -*- coding: utf-8 -*-
from enum import Enum
# 枚舉中 一個(gè)一個(gè)名字對(duì)應(yīng)一個(gè)值
Month = Enum('抬頭-Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))
print(Month.__members__)  # 枚舉中的值自動(dòng)從1開始,不會(huì)重復(fù)
# 得到三月份的值
print(Month['Mar'].value)  # 3
# 根據(jù)(2)來獲得月份名字
print(Month(2).name)  # Feb
# 定義一個(gè)顏色的常量枚舉
class Color(Enum):  # 第二種:自定義一個(gè)枚舉類
    red = 100
    green = 200
    blue = 300
    yellow = 200  # 不允許key相同或者value,如果value重復(fù),根據(jù)value取name只能取第一個(gè)
print(Color(200))  # Color.green

不允許key相同或者value相同,如果value重復(fù),根據(jù)value取name只能取第一個(gè)

總結(jié)

1.枚舉類不能用來實(shí)例化對(duì)象

2.訪問枚舉類中的某一項(xiàng),直接使用類名訪問加上要訪問的項(xiàng)即可,比如 color.RED

3.枚舉類里面定義的 Key = Value,在類外部不能修改 Value 值

4.枚舉項(xiàng)可以用來比較,使用 ==,或者 is

5.枚舉類中的 Key 不能相同,Value 可以相同,但是 Value 相同的各項(xiàng) Key 都會(huì)當(dāng)做別名

6.枚舉類可以用 for 進(jìn)行遍歷,members.items() 可以遍歷出含有別名的類

7.如果要枚舉類中的 key 也不能相同,需要導(dǎo)入 unique 對(duì)枚舉類進(jìn)行裝飾

原文鏈接:https://aweia.blog.csdn.net/article/details/125583107

欄目分類
最近更新