Closure: Lazy Evaluation And Eager Evaluation
Last updated
Last updated
Lazy Evaluation
Closure Lazy Evaluation And Eager Evaluation
함수 내부에 지역 객체를 생성하고 폐쇄적인 범위를 사용 하는 일급 함수를 다룰 때 지연 연산을 잊지 말아야한다.
Lazy Evaluation에 의하여 addend
는 반복문에 가장 마지막 값인 1000으로 산정 된다. 그 이유는 클로저가 폐쇄적인 범위를 사용 하는 일급 함수라는 것에 있다.
동작 순서
반복문을 순회 하며 funcs
라는 List에 함수의 오브젝트 주소를 담아둔다.
반복문 순회가 끝나면 함수의 주소값이 담겨있는 List를 반환한다.
adders
를 다시 순회 하면서 내부에 존재하는 함수 오브젝트 주소 값을 이용 하여 Callable 객체를 실행 시킨다.
오브젝트 주소가 담겨져 있으며 최종적으로 메모리에 남아 있는 addend
값인 1000을 이용 하고 x에 파라미터 정보인 5를 사용 하게 된다.
결과
Eager Evaluation
Lazy Evaluation 방식을 강제로 Eager Evaluation으로 변경 할 수 있다. 메모리의 마지막 값을 사용 했던 방식을 빗대어 보면 default 값을 지정 해주었을 때 상쇄 시킬 수 있을 것이다.
기억 해보자면 파이썬은 언제나 객체를 참조하는 값을 사용하여 재사용률을 높힌다.
달라진 점
여기서 중요한 포인트는 함수 파라미터의 기본 값을 사용 했다는 점이다. _addend=addend
는 현재 값을 함수 내부에서 사용 할 수 있도록 객체 참조값을 넣어주었다.
Lambda 내부에서 Print 할 수 있다는 것에 또 한번 놀라운 사실임을 알 수 있다.
결과