可能是重复的问题:
python:属性字段是否自动缓存?
关于Python中属性的效率问题,我想知道它们被调用的时间和频率。
以一个简单的例子为例,假设我子类化了 namedtuple 并有以下内容:
from collections import namedtuple
from math import pi
class Circle (namedtuple('Circle', 'x, y, r')):
__slots__ = ()
@property
def area(self):
return pi*self.r**2
unitCircle = Circle(0, 0, 1.0)
print 'The area of the unit circle is {0} units'.format(unitCircle.area)
我假设该区域在第一次调用之前不会被计算,但一旦被调用,那个值会被缓存直到有变化或每次被调用时重新计算吗?
换句话说,如果我有一个属性(与此不同)相对昂贵,需要重复计算,并且将被多次使用,那么我应该让它成为一个属性,还是将其存储为一个值,并在真正需要更新时显式地计算它,这样更有效?