在python中,如何只为函数存储一次“常量”?

2024-06-01 12:20:19 发布

您现在位置:Python中文网/ 问答频道 /正文

有些函数需要不需要参数化的“常量”值(即不设计为以后重新定义)。虽然默认参数是each functionstored only once,但有些参数作为参数(即作为signature的一部分)放置并不是很有意义。例如(不是很有用的):

def foo(bar):
    my_map = {"rab": barType, "oof": fooType}
    return my_map.get(bar,defaultType)()

为每次调用重新定义这样的常量会浪费CPU时间和RAM空间。其他一些方法是存储诸如模块级全局变量之类的常量,或者使函数成为一个可调用的类,但是可能还有其他方法?

在执行模块级global方法时,我在常量变量前面加上一个“u”,以表示它存在于中,而不是为了任何人的利益。尽管如此,我还是觉得模块名称空间有点“被污染”,更不用说shame of using之类的东西了as discouraged as globals

_my_map = {"rab": barType, "oof": fooType}
def foo(bar):
    return _my_map.get(bar,defaultType)()

或者把它转换成类的方式。我将__call__设为classmethod,以避免创建实例:

class foo:
   my_map = {"rab": barType, "oof": fooType}
   @classmethod
   def __call__(cls,bar):
       return cls.my_map.get(bar,defaultType)()

这些方法够Python吗?

还有别的办法吗?

作为一种实践,使用这样的“常数”是否还可以?

注意我的示例中的这些对象不一定是实际的常量,而是按其用途使用(也可以认为是这样)。


Tags: 方法map参数getreturnfoomydef