Python列舉型別的使用
阿新 • • 發佈:2021-01-20
列舉型別是在Python3.4新增到Python的標準庫。
建立列舉
Python提供了兩種方法來建立列舉:
- 基於class語法建立列舉
- 基於Function API建立列舉
建立列舉首先要匯入Enum類
>>> from enum import Enum
基於class語法建立列舉
示例
'''
遇到問題沒人解答?小編建立了一個Python學習交流QQ群:778463939
尋找有志同道合的小夥伴,互幫互助,群裡還有不錯的視訊學習教程和PDF電子書!
'''
>>> from enum import Enum
>> > class Color(Enum):
... red = 1
... green = 2
... blue = 3
示例定義以下內容:
- 定義了Color的列舉型別。
- 定義了列舉型別Color的列舉成員:Color.red,Color.green,Color.blue。
- 給每一個列舉成員賦值,如Color.red的值為1。需要注意的是列舉成員的值可以指定為其他型別,沒有強制要求是整型。
列舉成員包含了兩個屬性:name和value
>>>Color.red.name
red
>>>Color.red.value
1
定義字串型別的值
'''
遇到問題沒人解答?小編建立了一個Python學習交流QQ群:778463939
尋找有志同道合的小夥伴,互幫互助,群裡還有不錯的視訊學習教程和PDF電子書!
'''
>>> from enum import Enum
>>> class Color(Enum):
... red = 'r'
... green = 'g'
... blue = 'b'
基於Function API建立列舉
上面基於class建立列舉的示例用Function API可以改寫為
>>>from enum import Enum
>> >Color = Enum('Color','red green blue')
>>>list(Color)
[<Color.red:1>,<Color.green:2>,<Color.blue:3>]
Enum函式第一個引數為列舉名。第二個引數為列舉成員列表。
第二個引數表示的列舉成員列表有三種方式:
- 使用字串表示,各成員名使用空格隔開。成員的值從1開始自動遞增。
- 使用元組表示,成員的值從1開始自動遞增。
- 使用字典表示,字典可以指定列舉成員的值,其中字典的鍵位列舉成員名,值為列舉成員的值。
使用字典宣告示例
>>>from enum import Enum
>>>Color = Enum('Color',{'red':1,'green':2,'blue':4})
訪問列舉成員
訪問列舉成員有三種方式:
- 使用點號(".")引用
- 使用value獲取,值對應的列舉成員
- 使用列舉成員名
按值訪問
>>>Color(1)
<Color.red:1>
按列舉名訪問
>>>Color['red']
<Color.red:1>
遍歷列舉
列舉支援對它的成員進行遍歷
list遍歷
>>>list(Color)
[<Color.red:1>,<Color.green:2>,<Color.blue:3>]
for遍歷
>>>for color in Color:
... print(color)
列舉型別的比較
'''
遇到問題沒人解答?小編建立了一個Python學習交流QQ群:778463939
尋找有志同道合的小夥伴,互幫互助,群裡還有不錯的視訊學習教程和PDF電子書!
'''
>>> Color.red is Color.red
True
>>> Color.red is Color.blue
False
>>> Color.red is not Color.blue
True
注意列舉成員並非整型,是不能做大小比較,如
>>> Color.red < Color.blue
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: Color() < Color()
只能做相等性比較
>>> Color.blue == Color.red
False
>>> Color.blue != Color.red
True
>>> Color.blue == Color.blue
True
>>> Color.blue == 2
False
定義列舉的方法
由於列舉型別也是一個class,所以也支援給列舉型別定義方法。
示例:
'''
遇到問題沒人解答?小編建立了一個Python學習交流QQ群:778463939
尋找有志同道合的小夥伴,互幫互助,群裡還有不錯的視訊學習教程和PDF電子書!
'''
class Mood(Enum):
funky = 1
happy = 3
def describe(self):
# self為列舉成員
return self.name, self.value
def __str__(self):
return 'my custom str! {0}'.format(self.value)
@classmethod
def favorite_mood(cls):
# cls為列舉型別
return cls.happy
使用:
>>> Mood.favorite_mood()
<Mood.happy: 3>
>>> Mood.happy.describe()
('happy', 3)
>>> str(Mood.funky)
'my custom str! 1'
定義列舉的子類
定義列舉的子類需要滿足:父列舉沒有定義任何的列舉成員,此時才允許有子類。
>>> class MoreColor(Color):
... pink = 17
...
TypeError: Cannot extend enumerations
這是由於Mood已定義了列舉成員,不允許擴充套件。