在Python中简单事物用类还是闭包

21 投票
3 回答
1214 浏览
提问于 2025-04-16 14:24

我想了解一下“带有记忆”的函数,具体是用类实现和用闭包实现的区别。

考虑一个(非常)简单的例子:

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()) 

这两种方式的性能和内存消耗哪个更好呢?使用槽(slots)会让类的性能更好吗?

谢谢,

赫尔南

附注:我知道在这个极其简单的例子中,可能没有太大区别。但我对那些会被调用很多次或者会被实例化很多次的复杂函数更感兴趣。

3 个回答

-1

如果你想要更好的性能,并且只是想获取一些值,那么使用像元组这样的内置数据类型会是最好的选择,因为它能提供更快的速度。

3

我会写一些更复杂的功能,并对它们进行性能分析。

8

在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

看起来函数版本占用的内存更多。

撰写回答