함수에서 1개 이상의 값을 return 하는 방법


다들 함수에서 여러 개 값을 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를 주로 쓰는데요. 다른 분들은 어떤 걸 선호하시는지, 제가 쓰고 있는 방법 외에 다른 방법을 쓰시는지 궁금합니다.

  • 2016년 01월 19일에 작성됨

조회수 291


1 답변


좋아요
0
싫어요
채택취소하기

파이썬 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] # 인덱스로 접근 가능
  • 2016년 01월 19일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close