Python 09 Nested Function, Closure, Decorator


ネスト機能


1.概念


  • ネスト関数:関数に別の関数を宣言する
  • 外部関数:親関数、外部関数(上記の例ではparent function()
  • )
  • ページ関数:内部関数(前例ではchild function()
  • )
  • 親関数でのみ呼び出す=>親関数の外部では
  • を呼び出すことはできません.
  • ネスト関数ネスト関数親関数を使用する変数または情報
  • 親関数は、戻り値(=戻り値)
  • としてネスト関数を返します.
    オーバーラップ関数は
  • 親関数の戻り値として宣言されるため、親関数の変数、すなわちEnclosed関数のローカル領域の変数は外部から直接アクセスできません.ただし、ネスト関数
  • は使用できます.
  • 第6行戻り値にchild function()カッコを付ける
    関数自体ではなく内部関数の戻り値を返す関数は、ネスト関数
  • である.

    2.理解


    変形例

    1

    def parent_function():
        def child_function():
            return "this is a child function"
    
    
        return child_function 🔴
    
    
    print(parent_function())
    # <function parent_function.<locals>.child_function at 0x7feb10b2bee0>
  • 🔴 減算()後、child function関数オブジェクトのアドレスはreturn
  • である.
  • は、内部関数の戻り値を返すのではなく、内部関数自体を返す.これが閉パケット
  • である.

    2

    def parent_function():
        def child_function():
            return "this is a child function"
    
    
        child_function() 🔴
    
    
    print(parent_function())
    # None
  • 🔴 returnを削除するとNone出力になります
    義父関数の戻り値が未定なので

    3

    def parent_function():
        def child_function():
            print("this is a child function") 🔵
    
    
        child_function() 🔴
    
    
    print(parent_function())
    # this is a child function 🔵
    # None 🔴
    
  • 🔵 ネスト関数は値を返さないがprintがあるため、親関数で実行されるchild function()はprint(「this a child function」)を実行し、
  • 🔴 None出力
  • 親関数の戻り値がないため

    レプリカ


    1.使用理由

  • 情報に基づいて計算を実行したい場合、これらの情報へのアクセスを制限して露出や変更を防止するには、
  • を使用します.
  • のグローバル変数を使いたくないとき.グローバル変数は、任意に使用することによって変更される可能性があるため、non-local変数をグローバル変数として使用するには
  • を使用します.
  • クラスを使用したくない場合.Pythonはオブジェクト向けの言語で、すべてのデータがクラスとして作成され、クラスが関数より重い可能性があるため、効率が低下しています.

    2.概念


  • ネストされた関数とは異なり、親関数の戻り値は、上記の例に示すように、内部関数自体ではなく、内部関数の値を返します.
  • 使用方法:閉パッケージがある場合、親関数を新しい変数に宣言すると、その変数には内部関数のアドレス値が含まれるため、()が変数に貼り付けられ、関数として再び呼び出されます.
  • 3.理解

    #클로저
      
    def outer(num):
        def inner():
            return num + 3
        return inner
    print(outer(10))
    # <function outer.<locals>.inner at 0x01FDC340>
    
      
    
    #cf)nested function
      
    def outer(num):
        def inner():
            return num + 3
        return inner()
    print(outer(10))
    # 13

    デコレーション🏼

  • decorator closureのようにネスト関数を返す関数
  • は他の関数に適用され、適用する関数が実行される前に無条件に
  • が実行される.
  • 「装飾」別の関数に装飾のように別の関数に掛けられた関数
  • .
    @is_paid_user
    def jackpot_stock_information():
        return "계시가 내려졌습니다. 삼성전자를 사세요!"
  • decoratorとして使用できる関数=ネストされた関数のみを返す関数