いわゆるクラス属性の遅延計算とは、クラスの属性をプロパティとして定義し、アクセスされたときのみ計算され、アクセスされると結果がキャッシュされるので計算する必要がありません。毎回。遅延計算プロパティを構築する主な目的は、パフォーマンスを向上させることです
プロパティ
本題に入る前に、プロパティの使用法を理解して、プロパティへのアクセスをメソッド呼び出しに変換します。
class Circle(object): def init(self, radius): self.radius = radius @property def area(self): return 3.14 * self.radius ** 2 c = Circle(4) print c.radius print c.area
area はメソッドとして定義されていますが、 @property を追加すると直接 c.area を実行してプロパティとしてアクセスできることがわかります。
ここで問題が発生します。c.area が呼び出されるたびに計算されます。これは CPU の無駄です。これは遅延プロパティです
class LazyProperty(object): def init(self, func): self.func = func def get(self, instance, owner): if instance is None: return self else: value = self.func(instance) setattr(instance, self.func.name, value) return value import math class Circle(object): def init(self, radius): self.radius = radius @LazyProperty def area(self): print 'Computing area' return math.pi * self.radius ** 2 @LazyProperty def perimeter(self): print 'Computing perimeter' return 2 * math.pi * self.radius説明
遅延計算用のデコレータ クラス LazyProperty。 Circle はテストに使用されるクラスです。Circle クラスには、半径、面積、周長の 3 つの属性があります。面積と周囲のプロパティは LazyProperty によって装飾されます。 LazyProperty の魔法を試してみましょう:
>>> c = Circle(2) >>> print c.area Computing area 12.5663706144 >>> print c.area 12.5663706144
以上が遅延初期化メソッドを使用して Python のパフォーマンスを向上させるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。