본문 바로가기
Python

[Python] 일급 객체 (first-class citizen)

by 혀넝 2022. 3. 6.

파이썬은 객체 지향 프로그래밍(object-oriented programming)으로, 일급 함수라는 개념을 가지고 있다. 파이썬에서의 객체는 숫자, 문자열, 튜플, 리스트, 딕셔너리, 함수를 포함하고 있다. 그중에서도 일급 객체란 아래의 조건을 만족하는 객체를 의미한다.

1) 변수 또는 자료구조에 할당 가능
2) 매개변수로 전달 가능
3) 리턴 값으로 사용 가능

함수는 일급 객체의 조건을 만족한다. 따라서 변수와 자료구조에 할당할 수 있고, 매개변수로 전달 가능하며 리턴 값으로도 사용할 수 있다.

 

1. 변수 또는 자료구조에 할당 가능

1) 변수에 함수 할당
함수를 정의 후 새로운 변수에 담아 출력하면 같은 결과가 나오는 것을 볼 수 있다.

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

x = add

print(add)
print(x)

print(add(1, 2))
print(x(1, 2))

<결과>

<function add at 0x100f0feb0>
<function add at 0x100f0feb0>
3
3

 

2) 리스트에 함수 할당
일급 객체는 자료구조에 할당 가능하므로 리스트에 함수를 할당할 수 있다.

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

def multiply(a, b):
    return a * b

new_list = [add, multiply]

for i in new_list:
    print(i(3, 9))
    
>>>
12
27

 

2. 매개변수로 전달 가능

함수는 함수의 매개변수로 다른 함수를 전달할 수 있다.

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

def add_some(func, a, b):
    print(func(a, b))

add_some(add, 2, 3)

>>> 5

 

3. 리턴값으로 사용 가능

함수 내에 또 다른 함수를 지정하고 내부 함수를 바깥 함수의 리턴 값으로 줬다. (closure를 알면 더 쉽게 이해할 수 있음)

def introduce(name):
    def wrapper():
        print(f"My name is {name}!")
    return wrapper

a = introduce("Jane")
a()

>>> My name is Jane!

'Python' 카테고리의 다른 글

[Python] combinations  (0) 2022.06.30
[Python] Iterators  (0) 2022.03.06
[Python] List Comprehensions  (0) 2022.03.06
[Python] 한 번에 여러 값 입력 (map 함수 / split 함수)  (0) 2022.02.12