Python中简单事物的类或闭包

Her*_*nan 19 python memory performance closures class

我想更多地了解作为类与闭包实现的"with memory"函数.

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

def constant(value):
    def _inner():
        return value
    return _inner
x = constant(5)
print(x())
Run Code Online (Sandbox Code Playgroud)

class Constant():
    def __init__(self, value):
        self._value = value

    def __call__(self):
        return self._value
y = Constant(5)
print(y()) 
Run Code Online (Sandbox Code Playgroud)

这些中的任何一个的性能和内存消耗都更好吗?使用插槽会让课程表现更好吗?

谢谢,

埃尔南

Ps.-我知道在这个极其简单的例子中,可能没关系.但是我对更复杂的函数感兴趣,这些函数将被多次调用或者将被多次实例化.

whe*_*ies 8

在Python 2.6中,我得到以下内容:

def foo(x):
    def bar():
        return x
    return bar

b = foo(4)
b.__sizeof__()
>>> 44
Run Code Online (Sandbox Code Playgroud)

但是使用一个类:

class foo(object):
    def __init__(self,x):
        self.x = x
    def __call__(self):
        return self.x

c = foo(4)
c.__sizeof__()
>>> 16
Run Code Online (Sandbox Code Playgroud)

看起来功能版本的内存占用量更大.

  • 你错过了一些足迹.第一个选项创建一个新的函数对象,但它也有一个关联的`__closure__`来保存值(`__sizeof__`返回16)和一个`__dict__`(`__sizeof__`表示124).该实例还有一个与之关联的`__dict__`.当然,如果你真的需要挤压内存,那么在课堂上使用`__slots__`. (3认同)

Tom*_*ych 3

我会编写更复杂的函数并对它们进行分析。