1. 程式人生 > >python3學習筆記:列舉enum

python3學習筆記:列舉enum

1. 列舉的定義

  1. 首先,定義列舉要匯入enum模組。
  2. 列舉定義用class關鍵字,繼承Enum類。
  3. 用於定義列舉的class和定義類的class是有區別【下一篇博文繼續分享】。

  示例程式碼:

複製程式碼
from enum import Enum

class
Color(Enum): red = 1 orange = 2 yellow = 3 green = 4 blue = 5 indigo = 6 purple = 7
複製程式碼

  程式碼分析:

  1. 上面的程式碼,我們定義了顏色的列舉Color.
  2. 顏色列舉有7個成員,分別是Color.red、Color.orange、Color.yellow等。
  3. 每一個成員都有它們各自名稱和值,Color.red成員的名稱是:red,值是:1。
  4. 每個成員的資料型別就是它所屬的列舉。【*注:用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