Python - AI 助手

Python functools cached_property() 函数



Python 的`cached_property()`函数将类的某个方法转换为属性,该属性的值只计算一次,然后作为普通属性缓存。也就是说,结果在方法第一次执行时存储。

此函数通过避免重复计算来提高程序性能,并通过允许使用方法简化代码。

语法

以下是`cached_property()`函数的语法。

@cached_property()

参数

此函数不接受任何参数。

返回值

装饰器返回来自被装饰方法的缓存结果。

示例 1

在这个例子中,我们使用`cached_property()`装饰器计算圆的面积。结果被缓存,因此后续访问面积将返回缓存的值而无需重新计算。

from functools import cached_property
class Circle:
    def __init__(self, rad):
        self.rad = rad
    @cached_property
    def area(self):
        print("Calculating area of a circle.")
        return 3.14159 * self.rad ** 2
circle = Circle(23)
print(circle.area) 
print(circle.area)

输出

结果如下所示:

Calculating area of a circle.
1661.90111
1661.90111

示例 2

现在,我们使用`cached_property`函数计算数字的`total_sum`。此结果将被存储,因此将来访问`total_sum`将检索缓存的值而无需重新计算。

from functools import cached_property
class NumSeries:
    def __init__(self, num):
        self.num = num
    @cached_property
    def total_sum(self):
        print("Sum of the numbers")
        return sum(self.num)
series = NumSeries([21, 3, 12, 45, 65])
print(series.total_sum)  
print(series.total_sum)

输出

代码如下所示:

Sum of the numbers
146
146

示例 3

在下方的代码中,使用了`cached_property()` 装饰器来缓存函数的结果,该函数将小写字母转换为大写字母。

from functools import cached_property
class MyString:
    def __init__(self, text):
        self.text = text
    @cached_property
    def upper_text(self):
        return self.text.upper()
s = MyString("welcome to tutorialspoint")
print(s.upper_text) 
print(s.upper_text)

输出

输出结果如下:

WELCOME TO TUTORIALSPOINT
WELCOME TO TUTORIALSPOINT
python_modules.htm
广告