함수에서 1개 이상의 값을 return 하는 방법
조회수 21552회
다들 함수에서 여러 개 값을 return 할 때 어떤 방법을 쓰고 계신가요? 제가 쓰고 있는 방법은 다음과 같습니다.
1. tuple을 쓰는 법
def f(x):
y0 = x + 1
y1 = x * 3
y2 = y0 ** y3
return (y0,y1,y2)
원소가 많아지면 몇 번째 원소가 어느 값을 저장하고 있는지 기억하는 게 점점 힘들어져서 이 방법은 투플이 길어질수록 비효율적입니다. 또 튜플을 unpack 하는 과정도 그렇게 보기 좋지 않습니다.
2. dictionary를 쓰는 법
def g(x):
y0 = x + 1
y1 = x * 3
y2 = y0 ** y3
return {'return0':y0, 'return1':y1 ,'return2':y2 }
첫 번째 방법보다 각 원소의 의미를 알아내기 쉽습니다.
3. class를 쓰는 방법
class ReturnValue(object): #return 될 값을 위한 클래스 정의
def __init__(self, y0, y1, y2):
self.y0 = y0
self.y1 = y1
self.y2 = y2
def g(x):
y0 = x + 1
y1 = x * 3
y2 = y0 ** y3
return ReturnValue(y0, y1, y2)
list를 쓰는 법
def h(x):
result = [x + 1]
result.append(x * 3)
result.append(y0 ** y3)
return result
1의 tuple을 쓰는 방법과 비슷합니다. 다만 리스트의 element가 서로 다른 타입이 될 수 있으므로 별로 좋지 않은 방법입니다. 그리고 tuple의 경우 return 받은 값을 바꿀 수 없는 반면 list의 경우 return 받은 값을 바꿀 수 있습니다.
보통 저는 2. dictionary를 주로 쓰는데요. 다른 분들은 어떤 걸 선호하시는지, 제가 쓰고 있는 방법 외에 다른 방법을 쓰시는지 궁금합니다.
1 답변
-
파이썬 2.6 이상에서 collections.namedtuple이 이 목적으로 만들어졌습니다.
import collections point = collections.namedtuple('Point', ['x', 'y']) p = point(1, y=2) # 파라미터 순서나 키워드로 설정 가능 p.x, p.y # 이름으로 접근 가능 p[0], p[1] # 인덱스로 접근 가능
댓글 입력