定义状态常量的 Pythonic 方式

Pythonic Way to Define Status Constants

我写了一个可以输出三样东西的函数:

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

如果我正在编写 C++ 代码,我会使用 #define 来创建一些状态常量,它们只是整数,这样函数就不会每次都返回字符串。是否有 Pythonic 等效项来避免像这样使用字符串?

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

您可以在字典中定义自己的映射,例如{1: "NormalStatus", 2: "ServerCompromised"} 等等。然后你可以 return 整数,只需要在字典中查找这些整数(如果需要的话)。

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

NORMAL_STATUS = 1
SERVER_COMPROMISED = 2
...

但是如enum模块的模块文档中所述

An enumeration is a set of symbolic names (members) bound to unique, constant values.

这也可以看作是将 C++ 的 #define 转换为 Python.

的最相似方式

你应该使用enum module for that. If you need to compare values to integers it's good to subclass from enum.IntEnum