问题描述
|
我想了解更多有关作为类与闭包实现的“带有内存”功能的信息。
考虑(非常)简单的示例:
def constant(value):
def _inner():
return value
return _inner
x = constant(5)
print(x())
与
class Constant():
def __init__(self,value):
self._value = value
def __call__(self):
return self._value
y = Constant(5)
print(y())
这些性能和内存消耗是否更好?使用插槽会使类表现更好吗?
谢谢,
赫南
附注-我知道在这个极其简单的示例中,可能没有关系。但是我对更复杂的功能感兴趣,这些功能将被调用很多次或被实例化很多次。
解决方法
在Python 2.6中,我得到以下信息:
def foo(x):
def bar():
return x
return bar
b = foo(4)
b.__sizeof__()
>>> 44
但是使用一个类:
class foo(object):
def __init__(self,x):
self.x = x
def __call__(self):
return self.x
c = foo(4)
c.__sizeof__()
>>> 16
看起来像函数版本是更大的内存占用。
,我会编写更复杂的功能并对它们进行概要分析。
,如果您想要性能并且只希望访问值,那么最好使用内置数据类型(例如元组)以获得最佳性能。