python3學習筆記:列舉enum
1. 列舉的定義
- 首先,定義列舉要匯入enum模組。
- 列舉定義用class關鍵字,繼承Enum類。
- 用於定義列舉的class和定義類的class是有區別【下一篇博文繼續分享】。
示例程式碼:
from enum import Enum
class Color(Enum): red = 1 orange = 2 yellow = 3 green = 4 blue = 5 indigo = 6 purple = 7
程式碼分析:
- 上面的程式碼,我們定義了顏色的列舉Color.
- 顏色列舉有7個成員,分別是Color.red、Color.orange、Color.yellow等。
- 每一個成員都有它們各自名稱和值,Color.red成員的名稱是:red,值是:1。
- 每個成員的資料型別就是它所屬的列舉。【*注:用class定義的類,實際上就是一種型別】
1.1 定義列舉時,成員名稱不允許重複
from enum import Enum
class Color(Enum): red = 1 red = 2
上面的程式碼,就無法執行。提示錯誤:TypeError: Attempted to reuse key: ‘red’
1.2 預設情況下,不同的成員值允許相同。但是兩個相同值的成員,第二個成員的名稱被視作第一個成員的別名
from enum import Enum
class Color(Enum): red = 1 red_alias = 1
成員Color.red和Color.red_alias具有相同的值,那麼成員Color.red_alias的名稱red_alias就被視作成員Color.red名稱red的別名。
1.3 如果列舉中存在相同值的成員,在通過值獲取列舉成員時,只能獲取到第一個成員
from enum import Enum
class Color(Enum): red = 1 red_alias = 1 print(Color(1))
輸出結果為:Color.red
1.4 如果要限制定義列舉時,不能定義相同值的成員。可以使用裝飾器@unique【要匯入unique模組】
from enum import Enum, unique @unique class Color(Enum): red = 1 red_alias = 1
再執行就會提示錯誤:ValueError: duplicate values found in <enum ‘Color’>: red_alias -> red
2. 列舉取值
2.1 通過成員的名稱來獲取成員
Color['red']
2.2 通過成員值來獲取成員
Color(2)
2.3 通過成員,來獲取它的名稱和值
red_member = Color.red
red_member.name
red_member.value
3. 迭代器
3.1 列舉支援迭代器,可以遍歷列舉成員
for color in Color: print(color)
輸出結果是,列舉的所有成員。Color.red、Color.orange、Color.yellow、Color.green、Color.blue、Color.indigo、Color.purple。
3.2 如果列舉有值重複的成員,迴圈遍歷列舉時只獲取值重複成員的第一個成員
from enum import Enum class Color(Enum): red = 1 orange = 2 yellow = 3 green = 4 blue = 5 indigo = 6 purple = 7 red_alias = 1 for color in Color: print(color)
輸出結果是:Color.red、Color.orange、Color.yellow、Color.green、Color.blue、Color.indigo、Color.purple。但是Color.red_alias並沒有出現在輸出結果中。
3.3 如果想把值重複的成員也遍歷出來,要用列舉的一個特殊屬性__members__
from enum import Enum class Color(Enum): red = 1 orange = 2 yellow = 3 green = 4 blue = 5 indigo = 6 purple = 7 red_alias = 1 for color in Color.__members__.items(): print(color)
輸出結果:(‘red’, <Color.red: 1>)、(‘orange’, <Color.orange: 2>)、(‘yellow’, <Color.yellow: 3>)、(‘green’, <Color.green: 4>)、(‘blue’, <Color.blue: 5>)、
(‘indigo’, <Color.indigo: 6>)、(‘purple’, <Color.purple: 7>)、(‘red_alias’, <Color.red: 1>)
4. 列舉比較
4.1 列舉成員可進行同一性比較
Color.red is Color.red
輸出結果是:True
Color.red is not Color.blue
輸出結果是:True
4.2 列舉成員可進等值比較
Color.blue == Color.red
輸出結果是:False
Color.blue != Color.red
輸出結果是:True
4.3 列舉成員不能進行大小比較
Color.red < Color.blue
輸出結果出錯:TypeError: unorderable types: Color() < Color()
相關推薦
python3學習筆記:列舉enum
1. 列舉的定義 首先,定義列舉要匯入enum模組。 列舉定義用class關鍵字,繼承Enum類。 用於定義列舉的class和定義類的class是有區別【下一篇博文繼續分享】。 示例程式碼: from enum import Enum class Color(Enum): red = 1
python3學習筆記及常見問題
packages 學習 chm iss error mission 版本 mod back 1,mac自帶的python是2.7版本,我們需要按照python3,這樣在terminal下可以直接使用,但是編譯打包的時候會默認使用python2.7 解決辦法:安裝virtua
python3學習筆記(0)
utf-8 xxx 初識 login inux 接口 動態 phi python環境 一、編程語言主要從以下幾個角度分類:1、編譯型和解釋型2、靜態語言和動態語言3、強類型定義語言和弱類型定義語言編譯型:程序運行前先由負責翻譯的程序將代碼轉換成可執行代碼進行執行。例如C/C
python3學習筆記(三)多線程與多進程
ttr pid make start lee close gif 自己 oops 線程thread,庫threading 進程process,庫Process 使用起來方法跟其他語言相似,也不需要下載其他的庫,語言自帶的庫裏就有 1.多線程的例子 1 #coding=
python3學習筆記(一)——數字、字符串、列表、字典、元組
類型 單詞 nbsp 3.1 true expand 替換 割點 gpo 什麽是python解釋器?
python3學習筆記4---引用http://python3-cookbook.readthedocs.io/zh_CN/latest/
語言 all 刪除 做到 over nmap 遍歷 values 算數 2018-03-01數據結構與算法(4) 1.16過濾序列元素 最簡單的過濾序列元素的方法就是使用列表推導。比如: >>> mylist = [1, 4, -5, 10, -7, 2
【轉】Python3學習筆記(urllib模塊的使用)
nal 方法 utf 網址 pin des IE tps erer 原文地址:https://www.cnblogs.com/Lands-ljk/p/5447127.html 1.基本方法 urllib.request.urlopen(url, data=None, [ti
python3學習筆記面向對象;過程;類
程序開發 結構 行為 問題 to do 解決問題 特定 oop 原因 編程範式 編程是 程序 員 用特定的語法+數據結構+算法組成的代碼來告訴計算機如何執行任務的過程 , 一個程序是程序員為了得到一個任務結果而編寫的一組指令的集合,正所謂條條大路通羅馬,實現一個任務的方式有
python3學習筆記 靜態方法,類方法,屬性方法
SM clas ssm inf pytho ID 靜態方法 delet 分享 靜態方法@statitmetod 只是名義上歸類管理,實際上在靜態方法裏訪問不了類或實例中的任何屬性 類方法@classmethed 只能訪問類變量,不能訪問實例變量 屬性方法@prope
Python3學習筆記-字符串和字符串操作
isl int 字符串操作 博客 mys 索引 很多 map format 字符串,可以存任意類型的字符串,比如名字,一句話等等 name = ‘Sriba‘ msg = ‘Welcome to my blog.‘ 字符串還有很多內置的方法,對字符串進行操作,常用的
python3學習筆記 錯誤處理
就是 python3 AR pen 程序 出錯 return 一起 erro 程序運行的過程中,如果發生了錯誤,可以事先約定返回一個錯誤代碼,這樣,就可以知道是否有錯,以及出錯的原因。在操作系統提供的調用中,返回錯誤碼非常常見。比如打開文件的函數open(),成功時返回文件
Python3學習筆記-列表(list)
ray trace 默認 indexer pan rec strong 不存在 mov Python內置的一種數據類型是列表:list。list是一種有序的集合,可以隨時添加和刪除其中的元素。 註:列表、list、數組、array 是一個東西,只是叫法不一樣 列表的索引(
Python3學習筆記-元組(tuple)
小括號 方括號 初始 clas 需要 -- 信息 數量 erro 元組:tuple 是一種有序列表。tuple和list非常類似,但是tuple一旦初始化就不能修改 元組使用小括號,列表使用方括號。 元組創建很簡單,只需要在括號中添加元素,並使用逗號隔開即可。 eg:
python3學習筆記 定制類
col pan one rom 不存在 print student AS tee __str__ class Student(object): def __init__(self, name): self.name = name def _
Python3學習筆記-字典(dict)
頁碼 AS 個學生 方法 china -- get === ike 字典也是開發過程中最常用的一種數據類型。如果需要存儲一個班學生的信息,每個學生有姓名、性別、年齡、住址等等的信息,如果用列表存儲,需要很多列表。這時候就需要用字典來定義了。字典,dict,dictiona
Python3學習筆記-字典及列表練習
class != 分組 elif fail style str AS 二維 一、字典練習_註冊校驗 需求點說明: 1、用字典存儲已有用戶名、密碼 2、判斷輸入用戶名、密碼、確認密碼不能為空:strip() 3、用戶名不能重復:key i
python3學習筆記(二):Python初識
區別 說明 from 學習筆記 情況 不能 col 需要 學習 一、算法 在開始認真地編程之前,首先來解釋下什麽是計算機程序設計。簡單地說,它就是告訴計算機要做什麽。計算機可以做很多事情,但是它不會自己思考,需要我們告訴它具體細節,並且使用計算機能夠理解的語言把算法告
Python3學習筆記——類
world 賦值語句 學習 特殊成員 name odin attribute delattr AR #!/usr/bin/env python #-*- coding:utf-8 -*- #面向對象(類+對象) 三大特性:封裝、繼承、多態 類的成員: 字段:
Python3學習筆記——異常處理
創建 n) 執行 sse usr true 異常處理 exce __str__ #!/usr/bin/env python # 1.異常處理 try: # 主要執行的代碼 except IndexError as e: # 對於某些錯誤需要特殊處理的,可以對特殊錯
Python3學習筆記——自定義模塊
brush print 學習 sys.path append 路徑 nbsp highlight PE import sys import os print(__file__) #打印相對路徑 base_dir = os.path.dirname(os.path.dir