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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值