国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python中的枚舉類型示例介紹

2020-02-16 00:33:37
字體:
來源:轉載
供稿:網友

起步

Python 的原生類型中并不包含枚舉類型。為了提供更好的解決方案,Python 通過 PEP 435 在 3.4 版本中添加了 enum 標準庫。

枚舉類型可以看作是一種標簽或是一系列常量的集合,通常用于表示某些特定的有限集合,例如星期、月份、狀態等。在沒有專門提供枚舉類型的時候我們是怎么做呢,一般就通過字典或類來實現:

Color = { 'RED' : 1, 'GREEN': 2, 'BLUE' : 3,}class Color: RED = 1 GREEN = 2 BLUE = 3

這種來實現枚舉如果小心翼翼地使用當然沒什么問題,畢竟是一種妥協的解決方案。它的隱患在于可以被修改。

使用 Enum

更好的方式是使用標準庫提供的 Enum 類型,官方庫值得信賴。3.4 之前的版本也可以通過 pip install enum 下載支持的庫。簡單的示例:

from enum import Enumclass Color(Enum): red = 1 green = 2 blue = 3

枚舉成員有值(默認可重復),枚舉成員具有友好的字符串表示:

>>> print(Color.red)Color.red>>> print(repr(Color.red))<Color.red: 1>>>> type(Color.red)<Enum 'Color'>>>> isinstance(Color.green, Color)True

枚舉類型不可實例化,不可更改。

定義枚舉

定義枚舉時,成員名不允許重復

class Color(Enum): red = 1 green = 2 red = 3 # TypeError: Attempted to reuse key: 'red'

成員值允許相同,第二個成員的名稱被視作第一個成員的別名

class Color(Enum): red = 1 green = 2 blue = 1print(Color.red)    # Color.redprint(Color.blue)    # Color.redprint(Color.red is Color.blue)# Trueprint(Color(1))    # Color.red 在通過值獲取枚舉成員時,只能獲取到第一個成員

若要不能定義相同的成員值,可以通過 unique 裝飾

from enum import Enum, unique@uniqueclass Color(Enum): red = 1 green = 2 blue = 1 # ValueError: duplicate values found in <enum 'Color'>: blue -> red

枚舉取值

可以通過成員名來獲取成員也可以通過成員值來獲取成員:

print(Color['red']) # Color.red 通過成員名來獲取成員print(Color(1))  # Color.red 通過成員值來獲取成員

每個成員都有名稱屬性和值屬性:

member = Color.redprint(member.name) # redprint(member.value) # 1

支持迭代的方式遍歷成員,按定義的順序,如果有值重復的成員,只獲取重復的第一個成員:

for color in Color: print(color)

特殊屬性 __members__ 是一個將名稱映射到成員的有序字典,也可以通過它來完成遍歷:

for color in Color.__members__.items(): print(color)   # ('red', <Color.red: 1>)            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永仁县| 平昌县| 平远县| 灵石县| 土默特右旗| 莱州市| 朔州市| 岳阳市| 麻阳| 沁水县| 浠水县| 嘉黎县| 册亨县| 梁河县| 隆子县| 仙桃市| 东安县| 泰来县| 克什克腾旗| 蛟河市| 富川| 栾城县| 乃东县| 清流县| 新津县| 玛纳斯县| 岫岩| 莱西市| 夏邑县| 手机| 高尔夫| 乌什县| 濮阳市| 烟台市| 博客| 龙岩市| 忻州市| 广昌县| 鄂州市| 彭水| 甘谷县|