如何用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中需要)。
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: 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.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'
问题内容: 我主要是C#开发人员,但目前正在使用Python开发项目。 如何用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+,与作者相同。py2和py3之间的代码并不完全兼容,例如,您需要__or
问题内容: Unicode字符串如何在Python的内存中按字面表示? 例如,我可以在内存中可视化为等效的ASCII字节。整数可以认为是2的恭维表示形式。但是,即使以3个字节长表示,我如何在内存中可视化原义代码点? 是否有将其存储在内存中的特定方法?Python 2和Python 3是否有区别? 问题答案: 我假设您想了解CPython(标准实现)。Python 2和Python 3.0-3.2对
问题内容: 如何在python中表示无穷大?无论您在程序中输入哪个数字,任何数字都不得大于此无穷大表示形式。 问题答案: 在Python中,您可以执行以下操作: 在Python 3.5中,您可以执行以下操作: 接着: 永远是真的。当然,除非指出,否则x也是无穷大或“ nan”(“非数字”)。 另外(Python的ONLY 2.X)中,在比较,较小,例如: 将返回true。
问题内容: 如何在Python中串联两个列表? 例: 预期结果: 问题答案: 你可以使用+运算符来组合它们: 输出:
问题内容: 在当前的作业中,我需要处理位向量,但是我不确定如何在Python中执行此操作。它们应该能够从4位到20位。我以前从未使用过位向量,但是我猜想一个人会创建一个使用无与伦比的字节数组,这些数组是使用通常的AND / OR / XOR操作进行操作的。 这里的 重要限制 是:除了标准Python提供的库之外,我不能依赖 任何 其他库。 我想我知道如何使用8位无符号字节数组在C中做到这一点:例如
问题内容: 如何在Python中执行以下操作? 我需要一个数组的元素,但是要从头到尾。 问题答案: 你可以通过以下方式使用该函数: 请注意,它不会返回列表。你可以使用来获得反向列表。