lazy evaluation - 느긋한 계산법

느긋한 계산법(Lazy evaluation)은 계산의 결과값이 필요할 때까지 계산을 늦추는 기법이다. 두 가지 관련된 항목들이 있는데 지연 계산법과 최소 계산법이다.
느긋한 계산법을 사용하는 언어들은 "이름으로 호출"하거나 "필요할 때 호출" 하는 방법이 있다.

출처 : https://ko.wikipedia.org/wiki/%EB%8A%90%EA%B8%8B%ED%95%9C_%EA%B3%84%EC%82%B0%EB%B2%95

import time

def print_iter(iter):
    for element in iter:
        print(element)

def lazy_return(num):
    print("sleep 1s")
    time.sleep(1)
    return num

print("comprehension_list=")
comprehension_list = [ lazy_return(i) for i in L ]
print_iter(comprehension_list)

print("generator_exp=")
generator_exp = ( lazy_return(i) for i in L )
print_iter(generator_exp)

실행 결과

comprehension_list는 lazy return()을 한번에 실행함을 볼 수 있고
generator_exp는 한번씩 실행함을 볼 수 있다.
처음에는 comprehension는 한번에 list에 저장해서 실행이 되고
generator는 lazy_return과 print_iter가 한번씩 실행된다고만 생각했고 이해가 되지 않았다. 아래 코드를 참조하고 이해가 되었다.

print("comprehension_list=")
comprehension_list = [ lazy_return(i) for i in L ]
print("check")
print_iter(comprehension_list)

print("generator_exp=")
generator_exp = ( lazy_return(i) for i in L )
print("check")
print_iter(generator_exp)

실행 결과

중간에 check를 출력 해보았다.
comprehension는 "check"가 lazy_return을 모두 실행후 print_iter가 실행되었고,
generator_exp는 "check"가 lazy_return을 콜 될때 마다 실행됨을 알게 되었다.

좋은 웹페이지 즐겨찾기