Lazy Evaluation


1. What is Lazy Evaluation


1.ウィキペディア


計算機プログラミングでは,緩和計算法(Lazy evaluation)は計算を計算結果値を必要とするまで遅らせる方法である.遅延計算法と最小計算法の2つの関連項目がある.
計算がゆったりしていれば不要な計算は行われないので、より速く実行でき、複合式を計算する際にエラー状態を回避し、無限の資料構造を記述し、予め定義されたものを使用せず、通常の関数で制御構造を定義することができます.
ゆとりのある計算方法を使用する言語は、「名前で呼び出す」または「必要に応じて呼び出す」を使用する計算ポリシーに分けられます.ハスケルのような実際の緩和言語の多くは、パフォーマンスの理由で「必要に応じて呼び出す」ポリシーを使用しています.
しかし,理論的にゆとりのある計算方法を示しており,「名前で呼ぶ」ことも容易である.
ゆとりのある計算法とは反対の計算法にはせっかちな計算法があり、厳格な計算法とも呼ばれる.せっかちな計算法は多くのプログラミング言語の動作方式である.

2.整理


私がカフェのオーナーだと思ってください!!☕️
想像してみてください.出勤時間にアメリカンコーヒーは平均20杯ほど売れます.そのため、私たちは20杯のコーヒーを作りました.
しかし、これはどうすればいいですか.私たちの喫茶店の前で無料のコーヒーの贈呈活動を行います.(なんでうちの店の前にしなきゃいけないの…)
ということで、古いお客さんが注文したお酒2杯を除いて、18杯は売れませんでした!!😱
しかし、もし私が事前にコーヒーを作らなければ、注文があるたびに、私はします.それでは、私はコーヒーを2杯しか作りませんでした.
もちろん、現実の効率とコンピューターの世界には違いがありますが、効率を計算しましょう.💻
コーヒーを20杯作る場合を例1、コーヒーを2杯作る場合を例2と言います
例1
コーヒーを20杯作る努力+20杯のコスト
例2
コーヒーを2杯作る努力+2杯のコスト
計算効率、例2>>>>>>>>>>>>>>>>例1.
このような注文があれば頑張ります(コーヒー作り)
Lazy Evaluation

2. Analysis Lazy Evaluation from code

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

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

L = [ 1,2,3]    

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)

  • 以上のコードの実行結果は以下の通りです.


  • sleep 1 s出力3回後出力123は、completion listがfor loopを迂回してlistを予め作成し(*例1はコーヒーポットを予め作成し)、生成したlistの内容を出力するのを見ることができる.
  • 反対
  • generator exp(generator式でlaz evaluation)を表示すると、sleepと{number}が繰り返し表示されます.これにより、lazy evaluationを事前に作成する必要はなく、必要に応じてloopを迂回してステップ1のループを実行することができます(例2の注文が到着したときに作成されます).
  • 3. Why use it?

    import random
    
    counter = random.randrange(1, 11)  # 1부터 10사이의 랜덤 값 생성
    counter_comprehension = counter
    counter_lazy = counter
    print(f"몇잔 팔았는지: {counter}")
    
    def Let_make_list():
        print("커피 만들기")
        return 1
    
    #예시1
    print("리스트 만들기(커피 만들기)")
    comprehension_list = [Let_make_list () for x in range(10)]
    
    print("리스트 사용(커피 판매)")
    for item in comprehension_list:
        counter_comprehension -= 1
        print("커피판매")
        if counter_comprehension == 0:
            break
    
    #예시2
    print("리스트 만들기(커피 만들기)")
    lazy_list = (Let_make_list () for x in range(10))
    
    print("리스트 사용(커피 판매)")
    for item in lazy_list:
        counter_lazy -= 1
        print("커피판매")
        if counter_lazy == 0:
            break
    上記のコードは、任意の数のコーヒーを受信し、例1と例2を比較するコードである.次の結果を表示します.

    計4杯の
  • コーヒーが販売されており、理解(例1の方法)として作成されたリストが既に作成され販売されており、lzayで作成されたコーヒー(例2の方法)は4回コーヒーが製造されたことが分かる.
  • 位の結果からlazy方式がより有効であることが分かった.
  • しかし、上の方法は、私たちがどれだけのコーヒーを販売するか分からない場合です!!ビールに効率的で、何杯売るか知っていれば、一度に仕上げるのは効率的です.
  • 結論に応じて適切なリストを作成してこそ、効果的に使用できます!

    4. conclusion


    Djangoを勉強している間に、本当に疑問のあるドラムORMはLazy Evaluation方式を使っているので、効率よくDBにアクセスできます.本当に聞いたことがあるだけで、実際に使っている時はDBにアクセスできます!!私は尼がずっと言っているのを聞いただけで、駆動の原理を知らない.
    データベースにアクセスする際にLazy Evaluationメソッドを使用すると,得られる結果値が3回フィルタリングされ,1回除外されるという利点がある.
    Lazy Evaluationメソッドは最後にquerySetを作成します.
    Lazy Evaluationを使用しない場合は、合計4つのquerySetを作成する必要があります.
    勉強するDjangoに近づいてきた気がします!pythonについてもっと勉強して、ドラムを使うと、ドラムに支配されている開発者ではなくドラムを占領して、私が使いたい部分を使って、違う部分を使って、少しずつ自分の好みに合わせて使う開発者を修正することができます...!
    遅くなってもよく勉強しなさい.🐍
    第1週木曜日