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

詳解Python中的枚舉類型

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

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

什么是枚舉類型

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

為什么要使用枚舉

使用枚舉有以下好處:

代碼更容易閱讀,更容易維護(hù)。

減少由轉(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 版本運(yùn)行結(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 行,運(yùn)行結(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 可以幫助我們使代碼更具可讀性,更具可維護(hù)性,推薦大家都用一用。

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

相關(guān)文章

  • Python編程pydantic觸發(fā)及訪問錯誤處理

    Python編程pydantic觸發(fā)及訪問錯誤處理

    這篇文章主要為大家介紹了Python編程中pydantic會觸發(fā)及發(fā)生訪問錯誤的處理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-09-09
  • python opencv將多個圖放在一個窗口的實(shí)例詳解

    python opencv將多個圖放在一個窗口的實(shí)例詳解

    這篇文章主要介紹了python opencv將多個圖放在一個窗口,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • 對Python捕獲控制臺輸出流的方法詳解

    對Python捕獲控制臺輸出流的方法詳解

    今天小編就為大家分享一篇對Python捕獲控制臺輸出流的方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • 基于Python實(shí)現(xiàn)的車牌識別系統(tǒng)

    基于Python實(shí)現(xiàn)的車牌識別系統(tǒng)

    本文將以基于Python的車牌識別系統(tǒng)實(shí)現(xiàn)為方向,介紹車牌識別技術(shù)的基本原理、常用算法和方法,并詳細(xì)講解如何利用Python語言實(shí)現(xiàn)一個完整的車牌識別系統(tǒng),需要的朋友可以參考下
    2023-10-10
  • python3的url編碼和解碼,自定義gbk、utf-8的例子

    python3的url編碼和解碼,自定義gbk、utf-8的例子

    今天小編就為大家分享一篇python3的url編碼和解碼,自定義gbk、utf-8的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • pytorch使用指定GPU訓(xùn)練的實(shí)例

    pytorch使用指定GPU訓(xùn)練的實(shí)例

    今天小編就為大家分享一篇pytorch使用指定GPU訓(xùn)練的實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • python實(shí)現(xiàn)TCPserver的使用示例

    python實(shí)現(xiàn)TCPserver的使用示例

    python實(shí)現(xiàn)TCPserver是一件簡單的事情,只要通過socket這個模塊就可以實(shí)現(xiàn),本文就來介紹一下python實(shí)現(xiàn)TCPserver的使用示例,感興趣的可以了解一下
    2023-10-10
  • 用python如何繪制表格不同顏色的excel

    用python如何繪制表格不同顏色的excel

    做數(shù)據(jù)分析的時候,用到了對Excel中的數(shù)據(jù)進(jìn)行顯示處理,能更直觀的了解數(shù)據(jù),所以下面這篇文章主要給大家介紹了關(guān)于利用python如何繪制表格不同顏色excel的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • python實(shí)現(xiàn)aes加密及pycryptodome庫使用

    python實(shí)現(xiàn)aes加密及pycryptodome庫使用

    AES算法是高級加密標(biāo)準(zhǔn),它是一種對稱加密算法,AES只有一個密鑰,這個密鑰既用來加密,也用于解密,這篇文章主要給大家介紹了關(guān)于python實(shí)現(xiàn)aes加密及pycryptodome庫使用的相關(guān)資料,需要的朋友可以參考下
    2023-10-10
  • django 外鍵創(chuàng)建注意事項(xiàng)說明

    django 外鍵創(chuàng)建注意事項(xiàng)說明

    這篇文章主要介紹了django 外鍵創(chuàng)建注意事項(xiàng)說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05

最新評論