새소식

반응형
개발 (Development)/┣Python

[파이썬 심화] 함수의 변수처럼 사용하는 법 - 일급객체 (First-class Citizen)

  • -
반응형

1. Question

함수는 프로그래밍 언어에서 다른 매개변수를 활용하여 반복적인 루틴을 하도록 만든 장치이다. C나 자바같은 언어에서는 변수는 변수, 함수는 함수로 완전히 분리되어 있다. add(a, b)라고 정의된 함수의 출력을 변수에 저장하는 것은 가능하나, 함수 그 자체 add를 변수에 할당하는 것은 불가능하다.

하지만, 파이썬에서는 이러한 것이 가능하다. 함수를 일급 객체 (Fist-class citizen)으로 취급해주기 때문이다.

일급 객체(First-class citizen)란, OOP에서 사용되는 개념 중 하나로 아래의 조건을 만족하는 객체를 의미한다.

  1. 변수 혹은 데이터 구조(자료구조) 안에 담을 수 있어야 한다.
  2. 매개변수로 전달할 수 있어야 한다.
  3. 리턴값으로 사용될 수 있어야 한다.

다른 일반적인 언어에서는 함수를 이용해서 1, 2, 3을 적용시키는 것은 상상도 할 수 없다. 파이썬에서 실제로 가능한지 실습해보자.


2. Practice

2.1 함수를 변수에 할당

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

f1 = foo

print(foo)      
print(f1)			# foo함수와 f1의 메모리 주소를 출력, 같은 주소를 가리킴

print(f1 is foo)		# is 함수로 비교

print(f1(1, 2))   
print(foo(1, 2))


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

def sub(a, b):
    return a - b

calc = [add, sub]

for i in calc:
    print(i(10, 5))		# 15와 5를 출력

"""
출력
<function func1 at 0x000001A568285D38>
<function func1 at 0x000001A568285D38>
True
3
3
10
5
"""

함수를 변수에 할당하는 예제. foo 함수를 매개변수 없이 변수와 컨터이너 안에 할당하는 것이 눈에 띈다.


2.2 함수를 매개변수로 사용

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

def add_manager(func, a, b):		# 함수를 매개변수로 받음
    print(func(a, b))			# 매개변수로 받은 함수를 통한 연산

add_manager(add, 1, 2)			# 매개변수로 add함수를 전달하고 3을 출력하게 됨

"""
출력
3
"""

함수를 매개변수로 사용하는 예제. 


2.3 함수를 리턴값으로 사용

def hello(name):
    def printer():
        print(f"Hello {name}!")
    return printer

func = hello("Fox")
func()

"""
출력
Hello Fox!
"""

함수를 리턴값으로 사용하는 예제. 마치 클래스의 멤버 변수에 접근하는 것 같이 사용할 수 있다.


파이썬은 개발자의 능률 향상을 위해 편리한 도구를 많이 만들어 두었다. 이번 포스트에서 배운 일급객체 개념은 이후 고차 함수, 람다식, 데코레이터, 클로저에서 다시 언급하니 꼭 알아두도록 하자.

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.