ふかっせいけいさん


「緩和計算法」(Lazy evaluation)は、計算を結果値の計算が必要になるまで遅らせる方法です.遅延計算法と最小計算法の2つの関連項目がある.
ゆとりアルゴリズムを用いた言語には,「名前で呼ぶ」あるいは「必要に応じて呼ぶ」方法がある.
ソース: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)
実行結果

completion listがlazy return()を一度に実行するのが見えます.
generator expは1回実行できます.
最初は、一度にリストに保存して実行することを理解します.
generatorはlazy returnとprint iterが1回ずつ実行されると考えているだけで、理解していません.以下のコードを参照し理解した.
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が印刷されています.
「check」は、すべてのlazy returnを実行した後にprint iterを実行することを理解します.
generator expは、lazy returnが呼び出されるたびに「check」が実行されることを発見しました.