📜  Python Functools – cached_property()(1)

📅  最后修改于: 2023-12-03 15:18:55.503000             🧑  作者: Mango

Python Functools – cached_property()

在Python中,每次访问属性时都要计算它的值可能是一个耗时的操作,这就是为什么我们使用缓存属性。 cached_property是装饰器,用于将方法转换为属性,只要没有更改该属性所依赖的变量,就可以避免重复计算。

导入 cached_property

在使用 cached_property 之前,我们需要首先导入 functools 模块。

import functools
示例

下面是一个示例,向我们展示了 cached_property 如何起作用。

class Employee:
    def __init__(self, name, salary):
        self._name = name
        self._salary = salary
    
    @functools.cached_property
    def email(self):
        print(f"Calculating email for {self._name}")
        return f"{self._name}@company.com"
    
    @functools.cached_property
    def salary(self):
        print(f"Calculating salary for {self._name}")
        return self._salary
    
employee = Employee("John Doe", 50000)
print(employee.email)   # Calculating email for John Doe, John Doe@company.com
print(employee.email)   # John Doe@company.com
print(employee.salary)  # Calculating salary for John Doe, 50000
print(employee.salary)  # 50000

在上面的示例中,我们定义了一个 Employee 类,它具有 emailsalary 属性。 emailsalary 属性使用 cached_property 装饰器定义。一旦计算了这些属性,它们就会被缓存,并且在第二次访问时,我们不需要再次计算它们,因此无需调用它们的方法。

结论

在许多情况下,缓存属性对于避免不必要的计算并提高性能是非常重要的。在使用 cached_property 装饰器时,我们可以将方法转换为缓存属性,以避免每次访问属性时都执行计算。