Python,Enum 类型有什么好处?
Python,Enum 类型有什么好处?
在Python 3.4中,我们获得了一个标准库中的Enum库:enum
。我们可以在Python 2.4到2.7(甚至3.1到3.3)中使用与enum
兼容的后备库,即pypi中的enum34。
但是,我们已经在没有这个新模块的情况下相当长的时间内完成了工作 - 那么为什么现在有了它?
我对来自其他语言的枚举的目的有一个大致的了解。在Python中,常见的做法是使用一个裸类,并将其称为枚举:
class Colors: blue = 1 green = 2 red = 3
这可以在API中用于创建值的规范表示,例如:
function_of_color(Colors.green)
如果对此有任何批评的话,它是可变的,你无法轻松地对其进行迭代,我们如何知道整数2
的语义?
那么我想我可以使用类似于命名元组的东西,那样会是不可变的?
>>> Colors = namedtuple('Colors', 'blue green red') >>> colors = Colors('blue', 'green', 'red') >>> colors Colors(blue='blue', green='green', red='red') >>> list(colors) ['blue', 'green', 'red'] >>> len(colors) 3 >>> colors.blue 'blue' >>> colors.index(colors.blue) 0
命名元组的创建有点冗余(我们需要两次写入每个名称),所以有些不优雅。获取颜色的"数字"也有点不优雅(我们需要两次写入colors
)。值的检查将需要使用字符串,这会稍微降低效率。
所以回到枚举。
枚举的目的是什么?它们为语言创造了什么价值?我应该在什么时候使用它们,什么时候应该避免使用它们?