小编pau*_*aul的帖子

Python中的@property速度开销

我正在尝试了解Python中@property装饰器的实用程序。具体来说,我使用如下属性设置了一个类:

class A(object):
    def __init__(self, x):
        self._x = x

    @property
    def x(self):
        return self._x

    @x.setter
    def x(self, new_x):
        self._x = new_x
Run Code Online (Sandbox Code Playgroud)

而且我还建立了一个没有提供相同功能的属性的类:

class B(object):
    def __init__(self, x):
        self._x = x
Run Code Online (Sandbox Code Playgroud)

我创建每个实例:

a = A(10)
b = B(10)
Run Code Online (Sandbox Code Playgroud)

在iPython中运行%timeit会产生以下结果

%timeit a.x
%timeit b._x
Run Code Online (Sandbox Code Playgroud)

1000000次循环,每循环3:213 ns的最佳时间

10000000次循环,最佳3:每个循环67.9 ns

%timeit a.x = 15
%timeit b._x = 15
Run Code Online (Sandbox Code Playgroud)

1000000个循环,每个循环最好3:257 ns

10000000次循环,每循环3:89.7 ns最佳

显然,如果您要以很高的频率与该对象交谈,则@property和@setter装饰器会逊色。我的问题就是,为什么要使用它?我想听听人们可能拥有的这些装饰器的用例。谢谢。

python performance properties object-design

5
推荐指数
1
解决办法
2464
查看次数

标签 统计

object-design ×1

performance ×1

properties ×1

python ×1