定义状态常量的Pythonic方法

时间:2018-08-14 22:05:47

标签: python optimization constants status

我写了一个可以输出三件事的函数:

def getStatus():
    if   condition1:
        return "NormalStatus"
    elif condition2:
        return "ServerCompromised"
    elif condition3:
        return "UnknownStatus"

如果我正在编写C ++代码,我将使用#define来生成一些状态常量,这些状态常量仅是整数,因此该函数不会每次都返回字符串。是否有Pythonic等效项可避免使用这样的字符串?

我打算多次调用此函数,因此对输出进行字符串比较可能比比较常量int慢得多。

2 个答案:

答案 0 :(得分:2)

您可以在{1: "NormalStatus", 2: "ServerCompromised"}等字典中定义自己的映射。然后,您可以返回Integers,而仅需在dict中查找这些整数(如有必要)。

注释中已经提到了一种替代方法:为此,您也可以使用enum module。也许与#define最相似的方式是这样声明(全局)变量:

NORMAL_STATUS = 1
SERVER_COMPROMISED = 2
...

但是正如枚举模块的模块文档中所述

  

枚举是绑定到唯一,恒定值的一组符号名称(成员)。

这也可以看作是将C ++的#define引入Python的最相似的方法。

答案 1 :(得分:2)

您应该为此使用enum模块。如果您需要将值与整数进行比较,最好从enum.IntEnum

进行子类化