某些函数需要不被参数化的“恒定”值(即不设计为以后重新定义)。虽然每个函数的默认参数只存储一次,但有些参数作为参数(即作为签名的一部分)并不是很有意义。对于(不是很有用的)示例:
def foo(bar):
my_map = {"rab": barType, "oof": fooType}
return my_map.get(bar,defaultType)()
为每次调用重新定义这样一个常量会浪费 CPU 时间和 RAM 空间。其他一些方法是将此类常量存储为模块级全局变量或使函数成为可调用类,但可能还有其他方法,也许?
在执行模块级全局方式时,我在我的(意为一个)常量变量前面加上一个“_”,以表明它不符合任何人的兴趣。我仍然觉得模块命名空间有点“污染”,更不用说使用像全局变量这样不鼓励的东西的耻辱了:
_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)()
这些解决方案是否足够pythonic?
还有其他方法可以做到这一点吗?
使用这样的“常数”甚至可以作为一种做法吗?
请注意,我的示例中的这些对象不一定是实际常量,而是根据它们的目的使用(并且可以被认为是)。