栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Python中表示“枚举”?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Python中表示“枚举”?

如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 versionAnimal = Enum('Animal', 'ant bee cat dog')Animal.ant  # returns <Animal.ant: 1>Animal['ant']  # returns <Animal.ant: 1> (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.ONE1>>> Numbers.TWO2>>> 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.ZERO0>>> Numbers.ONE1

可以通过以下方式添加对将值转换回名称的支持:

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'

如果您正在使用mypy,则表示Literal是表示“枚举”的另一种方法。

例如

from typing import Literal #python >=3.8from typing_extensions import Literal #python 2.7, 3.4-3.7Animal = Literal['ant', 'bee', 'cat', 'dog']def hello_animal(animal: Animal):    print(f"hello {animal}")hello_animal('rock') # errorhello_animal('bee') # passes


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/650930.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号