ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Python | Python 일급 함수(First Class function)
    python 2022. 1. 26. 14:11

    파이썬의 일급 함수에 대해서 정리해 보려고 합니다.

     

    특정 프로그래밍 언어에서 함수가 일급이라는 것은 다음의 조건을 만족하는 경우 일급 함수라고 합니다.

     

    1. 함수가 object 유형의 인스턴스인 경우.
    2. 함수를 변수에 저장할 수 있는 경우.
    3. 함수를 다른 함수에 매개변수로 전달할 수 있는 경우.
    4. 함수에서 다른 함수를 반환할 수 있는 경우.
    5. list, dict 등과 같은 데이터 구조에 저장할 수 있는 경우.

     

    각각을 예시를 통해 확인해 보도록 하겠습니다.

     

    함수가 object 유형의 인스턴스인 경우.

    먼저 간단한 예시로 변수에 1을 할당해 보겠습니다.

    num = 1 # 변수에 1을 할당
    print(type(num))               # <class 'int'>
    print(issubclass(int, object)) # True
    

    후 타입을 확인해보면 int라는 클래스이고, int클래스는 object를 상속받는 것을 확인할 수 있습니다.

     

    따라서 동일하게 확인을 해보면

    def im_object():
        return 'Im object'
    
    print(type(im_object))               # <class 'function'>
    print(isinstance(im_object, object)) # True
    

    위와 같이 함수가 object유형의 인스턴스인 것을 확인할 수 있습니다.

     

    함수를 변수에 저장할 수 있는 경우.

    def im_object():
        return 'Im object'
    
    v_func = im_object # 변수에 저장
    print(v_func())    # Im object
    

    함수를 변수에 저장하여 해당 변수로 함수를 실행할 수 있습니다.

     

    함수를 다른 함수에 매개변수로 전달할 수 있는 경우.

    def relay_func(msg):
        return f'>> sub : {msg}'
    
    def main_func(func):
        print('>> run main')
        print(func('hello'))
    
    main_func(relay_func)
    # >> run main
    # >> sub : hello

    메인 함수에 relay_func을 매개변수로 전달하여 메인 함수 내에서 relay_func함수를 실행하는 예제입니다.

     

    다른 예시로 자주 사용되는 map함수에서도 매개변수로 전달하여 사용할 수 있습니다.

    # map에 함수를 전달
    result = list(map(relay_func, 'ABCDE'))
    print(result) 
    # ['>> sub : A', '>> sub : B', '>> sub : C', '>> sub : D', '>> sub : E']

     

    함수에서 다른 함수를 반환할 수 있는 경우.

    def create_adder(x):
        def adder(y):
            return x + y
        return adder
    
    adder_100 = create_adder(100)
    print(adder_100(10)) # 110
    print(adder_100(20)) # 120
    print(adder_100(30)) # 130
    

    create_adder함수에서는 adder라는 다른 함수를 반환하고 있는 걸 확인할 수 있습니다.

     

    list, dict 등과 같은 데이터 구조에 저장할 수 있는 경우.

    def adder_1(x):
        return x + 1
        
    def adder_2(x):
        return x + 2
        
    def adder_3(x):
        return x + 3
    
    adder_dict = {'one':adder_1, 'two': adder_2, 'three': adder_3}
    adder_list = [adder_1, adder_2, adder_3]
    
    print(adder_dict)
    print(adder_list)
    
    print(adder_dict.get('one')(100)) # 101
    print(adder_list[1](100))         # 102
    

    위와 같이 list, dict형태에 저장 가능한 것을 확인할 수 있습니다.

     

    마무리

    일급 함수에 대한 내용은 파이썬뿐만 아니라 다은 프로그래밍 언어에도 적용이 되는 내용인 것 같습니다.

    함수형 프로그래밍을 할 때 일급 함수에 대한 내용이 나오는데, 일급 함수에 대한 내용을 따로 정리해 볼 수 있는 시간이었던 것 같습니다.

     

    감사합니다.

     

    참고자료

    https://book.pythontips.com/en/latest/decorators.html#giving-a-function-as-an-argument-to-another-function

    https://www.w3schools.com/python/python_classes.asp

    https://www.geeksforgeeks.org/first-class-functions-python/

    https://stackoverflow.com/questions/27392402/what-is-first-class-function-in-python

    https://www.tutorialspoint.com/first-class-citizens-in-python

    https://velog.io/@shchoice/First-class-Function%EC%9D%BC%EA%B8%89-%ED%95%A8%EC%88%98-Higher-order-Function%EA%B3%A0%EC%9C%84-%ED%95%A8%EC%88%98

    'python' 카테고리의 다른 글

    Python | Python 데코레이터(Decorator)  (0) 2022.01.26
    Python | Python 내부 동작과정  (0) 2022.01.24
    Python | Class에 대해서  (0) 2022.01.23
Designed by Tistory.