去发现生活中的美好,记录生活中的点点滴滴

Python优化技巧之lazy property

python admin 63℃

Python 对象的延迟初始化是指,当它第一次被创建时才进行初始化,或者保存第一次创建调用的结果,然后每次调用的时候直接返回该结果。延迟初始化主要用于提高性能,避免浪费计算,并减少程序的内存需求。

这里我们用到了lazy property

方式一:


class Lazy:
    def __init__(self, func):
        self.func = func

    def __get__(self, instance, cls):
        if instance is None:
            return self
        else:
            value = self.func(instance)
            setattr(instance, self.func.__name__, value)
            return value


# 调用:
class Circle(object):
    def __init__(self, radius):
        self.radius = radius

    @Lazy
    def area(self):
        print('evalute')
        return 3.14 * self.radius ** 2

# 测试
c = Circle(4)
print(c.radius)
for i in range(2):
    print(c.area)

方式二:

def lazy_property(func):
    attr_name = "_lazy_" + func.__name__

    @property
    def _lazy_property(self):
        if not hasattr(self, attr_name):
            setattr(self, attr_name, func(self))
        return getattr(self, attr_name)

    return _lazy_property

class Circle(object): 
  def __init__(self, radius): 
    self.radius = radius 

  @lazy_property
  def area(self): 
    print('evalute')
    return 3.14 * self.radius ** 2

注意:此类方法是空间换时间,是会占用内存以便达到快速响应的目的,另外如果是每次调用的结果都不一样,这类方式就不太适用了,只适用于每次调用结果都一样的代码调用优化。

转载请注明:永盟博客 » Python优化技巧之lazy property

喜欢 (2)