코딩테스트/Python 개념

[Python] 일급 객체

박소민 2023. 3. 19. 12:57
일급객체

: OOP에서 사용되는 개념 중 하나로 아래의 조건을 만족하는 객체를 의미

 

1. 변수 혹은 데이터 구조(자료구조) 안에 담을 수 있어야 한다.

2. 매개변수로 전달할 수 있어야 한다.

3. 리턴값으로 사용될 수 있어야 한다.

 

→ 함수를 변수에 할당할 수 있고, 매개변수로 전달도 가능하며, 리턴 또한 가능

 

변수에 함수 담기
def func1(a, b):   # 두 수를 더한 값을 리턴하는 func1 함수 선언
    return a + b  

f1 = func1         # f1이라는 변수에 func1 함수를 할당

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

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

print(f1(1, 2))   
print(func1(1, 2))
#함수 결과
<function func1 at 0x000001A568285D38>
<function func1 at 0x000001A568285D38>
True
3
3

 

자료구조에 할당
  • 리스트에 할당
def add(a, b):
    return a + b

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

calc = [add, mins]

for i in calc:
    print(i(10, 5)) # 15와 5를 출력
  • 예시) 배열에 람다식 넣어두고, 배열 불러올때 값 넣어주기 
    • move[0]일때 now 3 -> next=4
move=[lambda x:x+1, lambda x:x-1, lambda x:2*x]
for i in range(3):
        next=move[i](now)
관련 문제: https://yygs321.tistory.com/328

 

 

  • 딕셔너리에 할당
def add(a, b):
    return a + b

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

calc = {
    "add": add,
    "mins": mins,
}

num1 = calc["add"](10, 5)
num2 = calc["mins"](10, 5)

print(num1) # 15
print(num2) # 5

 

  • 매개변수로 함수 전달
def add(a, b):
    return a + b

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

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

 

  • 함수를 리턴값으로 전달 가능 (또한 함수를 함수 내에서 선언이 가능)
def hello(name):                
    def printer():              # 함수 안에서 함수 선언
        print(f"Hello {name}!") # print format 형식: f" {} " 구조

    return printer              # 리턴값으로 함수 반환

func = hello("Fox")             # hello 리턴값이 함수이기 때문에 func도 함수
func()							# 함수로 실행해줘야함