Python Decorator(2)


装飾を理解するためのFirst-class関数
既存の叙述内容と重複可能
First-class関数は
  • で使用される関数をFisrt-class関数と呼びます
  • 関数自体は、変数に格納することができる
  • .
  • 関数のパラメータに他の関数
  • を渡すことができる.
  • 関数の戻り値(戻り値)は、関数
  • を伝達するために使用される.
    PythonとFirst-class関数
  • Pythonは、すべてのコンテンツを対象としています.
  • (関数、クラス、変数、配列など)
    したがって、
  • は、関数機能の他に、オブジェクトのように使用することができる
  • Pythonのすべての関数は、
  • を意味する第1のクラスの関数として使用できます.
    💡 すべての言語でFirst-class関数がサポートされているわけではありません.Python、Go、JavaScript、Kotlinなどの最新言語で開発された関数式プログラミング技術.
    First-class関数の例
    def outer_func(num):
        # 중첩 함수에서 상위 함수의 변수에 접근 가능
        def inner_func():
            print(num)
            return 'complex'
        
        return inner_func
    
    fn = outer_func(10)    # <--- First-class function
    print(fn())            # <--- Closure 호출
    First-class関数の例
  • 関数自体は、変数に格納することができる
  • .
    def calc_square(digit):
    	return digit * digit
    
    a = calc_square
    
    print(a)
    """ 결과 : function calc_square at 0x7fc5080c4f70 
        즉, a 라는 변수에 함수가 할당되어 있는 것을 볼 수 있음. """
    
    print(a(2))
    
    """ 결과 : 4 
        a 에 할당된 calc_square 함수의 인자로 2가 전달되어 값은 4를 리턴함. """
  • 関数のパラメータに他の関数
  • を渡すことができる.
    def calc_square(digit):
        return digit * digit
    
    def list_square(function, digit_list):
        result = []
        for digit in digit_list:
            result.append(function(digit))
        print (result)
    
    num_list = [1, 2, 3, 4, 5]
    
    list_square(calc_square, num_list)
    
    """ 결과 : [1, 4, 9, 16, 25] 
    		calc_square 함수가 list_square 함수의 인자로 전달되어 result 배열에 값 추가. """
  • 関数の戻り値(戻り値)は、関数
  • を伝達するために使用される.
    def logger(msg):
        message = msg
    
        def msg_creator():    # <--- 함수 안에 함수를 만들 수도 있음
            print ('[HIGH LEVEL]: ', message)
        return msg_creator
    
    log1 = logger('Dave Log-in')
    
    print(log1)
    
    """ 결과 : <function logger.<locals>.msg_creator at 0x7f85180889d0>
        log1 에는 리턴된 msg_creator 함수가 들어 있음.(즉, 함수 호출이 아니라 함수가 담겨 있음.)"""
    
    log1()
    
    """ 결과 : [HIGH LEVEL]:  Dave Log-in 
        msg_creator 함수가 호출되어 위와 같은 결과를 리턴함. """