有些函数需要不需要参数化的“常量”值(即不设计为以后重新定义)。虽然默认参数是each function的stored 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吗?
还有别的办法吗?
作为一种实践,使用这样的“常数”是否还可以?
注意我的示例中的这些对象不一定是实际的常量,而是按其用途使用(也可以认为是这样)。