Классы или замыкания для простых вещей в Python
Я хотел бы узнать больше о функциях "с памятью", реализованных как классы vs закрытия.
Рассмотрим (очень) простой пример:
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())
Лучше ли производительность и потребление памяти? Использование слотов сделает класс более эффективным?
Спасибо,
Хернан
Ps.- Я знаю, что в этом чрезвычайно простом примере, вероятно, это не имеет значения. Но меня интересуют более сложные функции, которые будут называться большим количеством раз или которые будут создаваться многократно.
Ответы
Ответ 1
В 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
Похоже, что функциональная версия - это больший объем памяти.
Ответ 2
Я бы написал более сложные функции и профилировал их.
Ответ 3
Если вам нужна производительность и требуется только доступ к значениям, то лучше всего использовать встроенный тип данных, например кортеж для лучшей производительности