<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
你好,我是 徵哥,今天分享一下 Python 中的列舉型別,為什麼需要列舉型別,及如何使用。
列舉(Enum)是一種資料型別,是繫結到唯一值的符號表示。您可以使用它來建立用於變數和屬性的常數集。它們類似於全域性變數,但是,它們提供了更有用的功能,例如分組和型別安全。Python 在 3.4 版本中新增了標準庫 enum。
使用列舉有以下好處:
程式碼更容易閱讀,更容易維護。
減少由轉換或錯誤輸入引起的 bug。
使將來修改值變得更容易。
以我們最熟悉的性別為例,先建立一個列舉型別:
>>> 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 '未知'
接下來,讓我們先看看不使用列舉的版本,然後再看看使用列舉的版本,這樣就知道列舉的好處了。
以汽車銷售為例,我們需要根據不同國家的稅率來計算汽車的出售價格。不使用列舉的版本如下:
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 版本執行結果如下:
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 行,執行結果不變,但是程式碼更優雅,更容易閱讀了。而且後續增加出口的國家地區,也非常簡單,只需要增加一個列舉型別,建立一個新的 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)
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 的類來建立列舉,使用 enum[member_name] 通過名稱存取 Enum 成員,也可以通過並通過 enum(member_value) 存取,還可以通過 enum.member_name 來存取。Enum 可以幫助我們使程式碼更具可讀性,更具可維護性,推薦大家都用一用。
到此這篇關於詳解Python中的列舉型別的文章就介紹到這了,更多相關Python列舉型別內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45