소위 클래스 속성의 지연 계산은 클래스의 속성을 속성으로 정의하는 것으로, 액세스할 때만 계산되며, 일단 액세스하면 결과는 별도의 조치 없이 캐시됩니다. 매번 하세요. 모두 계산되었습니다. 지연된 계산 속성을 구성하는 주요 목적은 성능
속성
을 향상시키는 것입니다. 본론으로 들어가기 전에 속성의 사용이 속성 액세스를 메서드 호출로 변환할 수 있다는 점을 이해해 보겠습니다.
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가 호출될 때마다 한 번씩 계산됩니다. 어떻게 한 번만 계산할 수 있습니까? 이것이 게으른 속성의 코드 구현입니다. 🎜>
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 클래스에는 반경, 면적, 둘레의 세 가지 속성이 있습니다. 면적과 둘레의 속성은 LazyProperty에 의해 장식됩니다. LazyProperty의 마법을 시험해 보겠습니다.
>>> c = Circle(2) >>> print c.area Computing area 12.5663706144 >>> print c.area 12.5663706144
위 내용은 지연 초기화 방법을 사용하여 Python 성능 향상의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!