定义状态常数的Pythonic方法

定义状态常数的Pythonic方法,python,optimization,constants,status,Python,Optimization,Constants,Status,我写了一个函数,它可以输出三件事: def getStatus(): if condition1: return "NormalStatus" elif condition2: return "ServerCompromised" elif condition3: return "UnknownStatus" 如果我编写C++代码,我会使用定义> /COD>来生成一些状态常数,这些函数常量只是int,这样函数每次都不会

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

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

如果我编写C++代码,我会使用<代码>定义> /COD>来生成一些状态常数,这些函数常量只是int,这样函数每次都不会返回字符串。有没有一个Pythonic等价物可以避免使用这样的字符串


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

您可以在字典中定义自己的映射,如
{1:“NormalStatus”,2:“serverredised”}
等等。然后可以返回整数,只需在dict中查找这些整数(如果需要)

评论中已经提到了另一种选择:您也可以使用。定义最类似的方法可能是声明如下(全局)变量:

NORMAL_STATUS = 1
SERVER_COMPROMISED = 2
...
但正如enum模块的模块文档中所述

枚举是绑定到唯一常量值的一组符号名(成员)


这也可以被看作是将C++的
#define
转换成Python的最相似的方法。

您可以在字典中定义自己的映射,如
{1:“NormalStatus”,2:“serverconventive”}
等等。然后可以返回整数,只需在dict中查找这些整数(如果需要)

评论中已经提到了另一种选择:您也可以使用。定义最类似的方法可能是声明如下(全局)变量:

NORMAL_STATUS = 1
SERVER_COMPROMISED = 2
...
但正如enum模块的模块文档中所述

枚举是绑定到唯一常量值的一组符号名(成员)


这也可以被看作是将C++的
#define
转换成Python的最相似的方法。

您应该使用模块。如果您需要将值与整数进行比较,最好从中生成子类,您应该为此使用模块。如果您需要将值与整数进行比较,最好从

中创建子类如果您使用的是Python 3.4或更高版本,请尝试。否则,只需使用单词之间的所有大写字母和下划线来定义常量。非常好,谢谢!我将对此进行研究。如果您使用的是Python 3.4或更高版本,请尝试。否则,只需使用单词之间的所有大写字母和下划线来定义常量。非常好,谢谢!我将对此进行研究。如果键是数字,列表不是更容易吗?这取决于用例。dict在查找方面更加灵活和快速,在那里你可以在数字和文本之间有一个清晰可见的映射。我认为
enum
最接近我在这里寻找的内容。如果键是数字,列表不是更容易吗?这取决于用例。dict在查找方面更灵活、更快速,在那里你可以在数字和文本之间有一个清晰可见的映射。我认为
enum
最接近我在这里寻找的内容。这基本上就是我所说的,但你专注于使用enum模块,并提供更多的信息(子类化)。这基本上就是我所说的,但您主要关注的是使用带有更多信息的枚举模块(子类化)。足够我投票了。