python并且怎么表示_Python-如何在Python中表示“Enum”?
小編典典
如PEP 435中所述,將枚舉添加到Python 3.4中。它也已在pypi上反向移植到 3.3、3.2、3.1、2.7、2.6、2.5 和2.4。
對于更高級的Enum技術,請嘗試aenum庫(2.7、3.3+,與作者相同enum34。py2和py3之間的代碼并不完全兼容,例如,__order__在python 2中需要)。
要使用enum34,做$ pip install enum34
要使用aenum,做$ pip install aenum
安裝enum(無編號)將安裝完全不同且不兼容的版本。
from enum import Enum # for enum34, or the stdlib version
# from aenum import Enum # for the aenum version
Animal = Enum('Animal', 'ant bee cat dog')
Animal.ant # returns
Animal['ant'] # returns (string lookup)
Animal.ant.name # returns 'ant' (inverse lookup)
或等效地:
class Animal(Enum):
ant = 1
bee = 2
cat = 3
dog = 4
在早期版本中,完成枚舉的一種方法是:
def enum(**enums):
return type('Enum', (), enums)
用法如下:
>>> Numbers = enum(ONE=1, TWO=2, THREE='three')
>>> Numbers.ONE
1
>>> Numbers.TWO
2
>>> Numbers.THREE
'three'
您還可以輕松支持自動枚舉,如下所示:
def enum(*sequential, **named):
enums = dict(zip(sequential, range(len(sequential))), **named)
return type('Enum', (), enums)
并像這樣使用:
>>> Numbers = enum('ZERO', 'ONE', 'TWO')
>>> Numbers.ZERO
0
>>> Numbers.ONE
1
可以通過以下方式添加將值轉換回名稱的支持:
def enum(*sequential, **named):
enums = dict(zip(sequential, range(len(sequential))), **named)
reverse = dict((value, key) for key, value in enums.iteritems())
enums['reverse_mapping'] = reverse
return type('Enum', (), enums)
這將覆蓋具有該名稱的所有內容,但是對于在輸出中呈現枚舉很有用。如果反向映射不存在,它將拋出KeyError。對于第一個示例:
>>> Numbers.reverse_mapping['three']
'THREE'
2020-02-07
總結
以上是生活随笔為你收集整理的python并且怎么表示_Python-如何在Python中表示“Enum”?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: lru页面置换算法_C|内存管理|从LR
- 下一篇: python3.7怎么安装django_