python 3.5에서 값을 지연 계산하는 데 다음 코드가 있습니다. 나는 또한 동일한 결과를 가진 @cached_property
decorator을 시도했다, 그래서 나는 이것을 간단하게 사용할 것이다. 아래에서Python에서 인수로 전달할 때 지연 속성 평가를 피하는 방법
def bar(some_parameter, another_parameter):
if some_parameter != 10:
print(some_parameter)
else:
print(another_parameter)
: I가이 예와 같이 끝 내부에 사용되지 않더라도, 함수의 인수로 전달할 때
class Foo:
@property
def expensive_object(self):
if not hasattr(self, "_expensive_object"):
print("Lengthy initialization routine")
self._expensive_object = 2
return self._expensive_object
문제는 평가 도착이다 우리는 출력물이 전달 됨으로써 평가된다는 것을 알았지 만, 코드가 그것을 사용하려고하지 않았기 때문에 꼭 필요한 것은 아니었다.
In [23]: foo1 = Foo()
...: bar(3, foo1.expensive_object)
Lengthy initialization routine
3
In [24]: bar(3, foo1.expensive_object)
3
내 스크립트가 적 평가를 할 필요없이 실행할 수있는 상황의가있다, 그러나 때문에 이러한 경우의 어쨌든 그 일을 끝납니다. 매개 변수를 인수 분해하는 것도 실제적이지 않습니다. 또한 구성된 멤버 개체로 __init__
에서 사용합니다.
가능한 경우 실제로 읽을 때만 평가해야한다는 점에서이 속성을 더욱 게으 르고 싶습니다.
가 lazier을 확인하는 것입니다 수 있도록하는 유일한 방법 'bar'가 필요할 때 호출하는 함수. 함수 인수는 항상 즉시 평가됩니다. – chepner