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

詳解Python中的枚舉類型

 更新時間:2022年08月10日 09:34:48   作者:somenzz  
枚舉(Enum)是一種數(shù)據(jù)類型,是綁定到唯一值的符號表示。。本文就來和大家聊聊Python中的枚舉類型,為什么需要枚舉類型,及如何使用

你好,我是 征哥,今天分享一下 Python 中的枚舉類型,為什么需要枚舉類型,及如何使用。

什么是枚舉類型

枚舉(Enum)是一種數(shù)據(jù)類型,是綁定到唯一值的符號表示。您可以使用它來創(chuàng)建用于變量和屬性的常量集。它們類似于全局變量,但是,它們提供了更有用的功能,例如分組和類型安全。Python 在 3.4 版本中添加了標準庫 enum。

為什么要使用枚舉

使用枚舉有以下好處:

代碼更容易閱讀,更容易維護。

減少由轉(zhuǎn)換或錯誤輸入引起的 bug。

使將來修改值變得更容易。

如何使用枚舉

以我們最熟悉的性別為例,先創(chuàng)建一個枚舉類型:

>>>?from?enum?import?Enum
>>>?class?Gender(Enum):
...?????男?=?1
...?????女?=?0
...?????未知?=?2
...
>>>?Gender
<enum?'Gender'>

訪問枚舉:

>>>?for?g?in?Gender:
...?????print(g.name,g.value)
...
男?1
女?0
未知?2
>>>?print(Gender.男.name)
男
>>>?print(Gender.男.value)
1
>>>?isinstance(Gender.男,Gender)
True
>>>?Gender['男']
<Gender.男:?1>
>>>?Gender['男'].value
1
>>>?Gender['男'].name
'男'
>>>?Gender(2).name
'未知'

接下來,讓我們先看看不使用枚舉的版本,然后再看看使用枚舉的版本,這樣就知道枚舉的好處了。

以汽車銷售為例,我們需要根據(jù)不同國家的稅率來計算汽車的出售價格。不使用枚舉的版本如下:

from?dataclasses?import?dataclass

@dataclass
class?Car:
????model:?str
????price:?float
????registraion_state:?str

????def?total_cost(self)?->?float:
????????match?self.registraion_state:
????????????case?"OR":
????????????????return??self.price?+?(self.price?*?0.05)
????????????case?"WA":
????????????????return??self.price?+?(self.price?*?0.10)
????????????case?"CA":
????????????????return??self.price?+?(self.price?*?0.08)
????????????case?_:
????????????????raise?TypeError("Invalid?registraion_state?value")


car1?=?Car(model="RAV4",?price=30000,?registraion_state="OR")
car2?=?Car(model="RAV4",?price=30000,?registraion_state="WA")
car3?=?Car(model="RAV4",?price=30000,?registraion_state="CA")
print(car1.total_cost())
print(car2.total_cost())
print(car3.total_cost())

代碼共 26 行,用 3.10 版本運行結(jié)果如下:

31500.0
33000.0
32400.0

接下來,我們來看一看使用枚舉版本的代碼:

from?dataclasses?import?dataclass

from?enum?import?Enum

class?StateTax(Enum):
????OR?=?0.05
????WA?=?0.10
????CA?=?0.08

@dataclass
class?Car:
????model:?str
????price:?float
????tax:?StateTax

????def?total_cost(self)?->?float:
????????return??self.price?+?(self.price?*?self.tax.value)???????
????
????def?get_tax(self):
????????return?self.tax.value


car1?=?Car(model="RAV4",?price=30000,?tax=StateTax.OR)
car2?=?Car(model="RAV4",?price=30000,?tax=StateTax.WA)
car3?=?Car(model="RAV4",?price=30000,?tax=StateTax.CA)
print(car1.total_cost())
print(car2.total_cost())
print(car3.total_cost())

代碼共 28 行,運行結(jié)果不變,但是代碼更優(yōu)雅,更容易閱讀了。而且后續(xù)增加出口的國家地區(qū),也非常簡單,只需要增加一個枚舉類型,創(chuàng)建一個新的 Car 對象,需求修改 Car 類的任何代碼:

class?StateTax(Enum):
????OR?=?0.05
????WA?=?0.10
????CA?=?0.08
????CN?=?0.03

car4?=?Car(model="RAV4",?price=30000,?tax=StateTax.CN)

從字典創(chuàng)建枚舉

from?enum?import?Enum

tax?=?{
????'OR':?0.05,
????'WA':?0.10,
????'CA':?0.08,
????'CN':?0.03
}

StateTax?=?Enum('tax',?tax)

訪問枚舉的三種方式:

print(StateTax['CN'])
print(StateTax.CN)
print(StateTax(0.03))?#通過 value 來訪問

最后的話

枚舉 (Enum) 是綁定到唯一值的符號。我們可以通過定義一個繼承自 Enum 的類來創(chuàng)建枚舉,使用 enum[member_name] 通過名稱訪問 Enum 成員,也可以通過并通過 enum(member_value) 訪問,還可以通過 enum.member_name 來訪問。Enum 可以幫助我們使代碼更具可讀性,更具可維護性,推薦大家都用一用。

到此這篇關(guān)于詳解Python中的枚舉類型的文章就介紹到這了,更多相關(guān)Python枚舉類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用python實現(xiàn)語音文件的特征提取方法

    使用python實現(xiàn)語音文件的特征提取方法

    今天小編就為大家分享一篇使用python實現(xiàn)語音文件的特征提取方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • python多線程性能測試之快速mock數(shù)據(jù)

    python多線程性能測試之快速mock數(shù)據(jù)

    這篇文章主要為大家介紹了python多線程性能測試之快速mock數(shù)據(jù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • 解決Django transaction進行事務(wù)管理踩過的坑

    解決Django transaction進行事務(wù)管理踩過的坑

    這篇文章主要介紹了解決Django transaction進行事務(wù)管理踩過的坑,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 詳解python中的變量與注釋

    詳解python中的變量與注釋

    在 Python 中,變量是用于存儲數(shù)據(jù)的名稱,它可以保存不同類型的數(shù)據(jù),在Python中,有兩種類型的注釋:單行注釋和多行注釋,本文就給大家詳細的介紹一下python中的變量與注釋,需要的朋友可以參考下
    2023-08-08
  • Python如何繪制日歷圖和熱力圖

    Python如何繪制日歷圖和熱力圖

    這篇文章主要介紹了Python如何繪制日歷圖和熱力圖,幫助大家更好的理解和學習Python,感興趣的朋友可以了解下
    2020-08-08
  • 詳解Python openpyxl庫的基本應(yīng)用

    詳解Python openpyxl庫的基本應(yīng)用

    這篇文章主要介紹了Python openpyxl庫的基本應(yīng)用,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-02-02
  • Python編程基礎(chǔ)之運算符重載詳解

    Python編程基礎(chǔ)之運算符重載詳解

    這篇文章主要為大家詳細介紹了Python運算符重載,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • python打包多類型文件的操作方法

    python打包多類型文件的操作方法

    這篇文章主要介紹了python打包多類型文件的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • 使用Pandas操作Excel文件的技巧與方法分享

    使用Pandas操作Excel文件的技巧與方法分享

    今天接到一個需求,需要讀取excel,將其中兩列分別作為字典的key、value進行保存,怎么讀取excel呢,之前好像使用過Pandas,但是接觸不多,借此機會記錄一下學習的收獲,需要的朋友可以參考下
    2023-12-12
  • python實現(xiàn)上傳樣本到virustotal并查詢掃描信息的方法

    python實現(xiàn)上傳樣本到virustotal并查詢掃描信息的方法

    這篇文章主要介紹了python實現(xiàn)上傳樣本到virustotal并查詢掃描信息的方法,是比較實用的技巧,需要的朋友可以參考下
    2014-10-10

最新評論

泰州市| 康定县| 嵊泗县| 思茅市| 巢湖市| 富阳市| 罗平县| 抚顺县| 加查县| 日土县| 东阳市| 来宾市| 三河市| 石城县| 荣成市| 萨嘎县| 四会市| 凯里市| 谢通门县| 汝阳县| 班戈县| 墨竹工卡县| 莱州市| 江门市| 广饶县| 山东省| 禹城市| 郑州市| 黔东| 天全县| 鄱阳县| 梅河口市| 邵东县| 台南县| 漳平市| 怀柔区| 大荔县| 晋州市| 咸宁市| 鸡东县| 涟源市|