python中如何表示Enum(枚举)【面试题详解】

今天爱分享给大家带来python中如何表示Enum(枚举)【面试题详解】,希望能够帮助到大家。
Enums已经添加进了Python 3.4,详见PEP435。同时在pypi下被反向移植进了3.3,3.2,3.1,2.7,2.6,2.5和2.4。

通过$ pip install enum34来使用向下兼容的Enum,下载enum(没有数字)则会安装完全不同并且有冲突的版本。


from enum imoprt Enum
Animal = Enum(‘Animal’, ‘ant bee cat dog’)

等效的:


class Animals(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(*squential, **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’

人已赞赏
Python

python中如何重新加载一个python模块【面试题详解】

2020-12-28 16:14:42

Python

python if name == “main”做了什么【面试题详解】

2020-12-28 16:22:44

'); })();