first class function (일급 함수)

Jinhyeon Son·2020년 3월 26일
0

개념

목록 보기
6/26

first class object

일급 객체란 다음의 특징을 모두 충족하는 객체를 말한다

  • 변수나 데이터 구조 안에 담을 수 있다
  • 함수에 인수로 전달이 가능하다
  • 리턴값으로 사용될 수 있다

그리고

파이썬의 모든것은 객체이며 파이썬은 일급 객체 언어이다

그렇기 때문에 파이썬에서는 함수 또한 객체이며 일급 객체이다

따라서 파이썬의 함수는

  • 변수나 데이터 구조 안에 담을 수 있으며
  • 함수에 인수로 전달이 가능하고
  • 리턴값으로 사용될 수 있다

일급 함수로서의 활용

객체에 할당

def hello_world(a):
    for _ in range(a):
        print("hello world")

greet = hello_world
greet(3)

위와 같이 호출하면

hello world
hello world
hello world # 를 확인할 수 있다

매개변수로 전달

def add_two(a, b):
    return a + b


def calculate(func, arg1, arg2):
    print('result:', func(arg1, arg2))

calculate(add_two, 4, 10)

위와같이 호출하면

result: 14 # 를 확인할 수 있다

리턴값으로 전달

def document_it(func):
    def new_function(*args, **kwargs):
        print('Running function:', func.__name__)
        print('Positional arguments:', args)
        print('Keyword arguments:', kwargs)
        result = func(*args, **kwargs)
        print('Result:', result)
        return result
    return new_function


def add_ints(a, b):
    return a + b


closure_add_ints = document_it(add_ints)
print(decorated_add_ints(3, 5))

객체 decorated_add_ints에는 document_it(add_ints)의 리턴값인 new_function이 할당되었기 때문에
decorated_add_ints(3, 5)와 같이 호출하면 new_function(3, 5)를 호출한것과 같다

Running function: add_ints
Positional arguments: (3, 5)
Keyword arguments: {}
Result: 8
8

위와 같은 방식을 closure라고 한다

0개의 댓글