ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 13. 파이썬 함수 - 여러개의 값 반환하기(튜플)
    파이썬(Python) 강의 2019. 3. 13. 13:48

    들어가기전에

    이 포스트는 여러분이 파이썬을 설치했고 각자 원하는 IDE를 이용해 파이썬을 개발한다고 가정한다. 혹시 파이썬을 설치하지 않았다면  1.파이썬 설치 및 개발환경 설정 이 포스트에서 파이썬과 파이썬 개발환경을 먼저 셋업하길 바란다. 앞서 말했듯이 반드시 실습 해 보길 바란다. 이 포스트는 여러분이 파이썬의 주요 자료형과 함수를 알고있고 사용 할 수 있다고 가정한다. 또한 이 포스트는 여러분이 파이썬 함수의 기초를 알고있다고 가정한다.

    목표

    • 여러개의 값 리턴하기
    • 여러개의 값 리턴하기에 대한 착각

    여러개의 값 리턴하기

    파이썬은 아래와 같은 형식의 함수를 선언/사용 할 수 있다.

    def function(x, y, z):
    return x + y, y + z, x + z;


    val
    = function(1, 3, 5)
    print(val) 실행 결과: (4, 8, 6)

    함수의 리턴 부분을 보자. 우리는 3개의 값을 리턴하고 있다. 그리고 print를 해 보면 3개의 값이 출력된다. 아래와 같은 예를 보자.

    def function(x, y, z):
    return x + y, y + z, x + z;


    val1, val2, val3 = function(1, 3, 5)
    print(val1)
    print(val2)
    print(val3) 실행 결과:

    4

    8 6

    위와같은 문법을 통해 첫번째 리턴 값은 val1에, 두번째 리턴 값은 val2에 3번째 리턴값은 val3에 들어가는 것을 확인 할 수 있다. 따라서 va1 = x + y, val2 = y + z, val3 = x + z가 들어간다. 만약 리턴하는 값의 개수보다 리턴 받을 변수의 값의 개수가 더 적으면 에러가 난다.

    def function(x, y, z):
    return x + y, y + z, x + z;


    val1
    , val2 = function(1, 3, 5)
    print(val1)
    print(val2) 실행 결과: val1, val2 = function(1, 3, 5) ValueError: too many values to unpack (expected 2)

    무슨 뜻이냐 하면, function이라는 함수는 3개의 값을 리턴하는데, 받는 변수(val1, val2)가 2개밖에 없어 에러가 났다는 뜻이다.

    위와 같은 방법으로 파이썬 함수에서는 값을 여러개 리턴하고 그 값을 여러개의 변수에 저장 할 수 있는 것 처럼 보인다.

    여러개의 값 리턴하기에 대한 착각

    처음으로 돌아가보자.

    def function(x, y, z):
    return x + y, y + z, x + z;


    val
    = function(1, 3, 5)
    print(val) 실행 결과: (4, 8, 6)

    val에는 function에서 리턴한 값들이 들어갔다. 뭐가 문제인가? 괄호가 문제이다. 이 괄호는 무엇을 뜻하는가? 바로 튜플을 뜻한다. 확인해보자.

    def function(x, y, z):
    return x + y, y + z, x + z;


    val = function(1, 3, 5)
    print(type(val)) 실행 결과:

    <class 'tuple'>

    즉 function이라는 함수는 하나의 tuple을 리턴했다. 값을 여러개 리턴한게 아니라 튜플 하나를 리턴했다는 것이다. 모양새만 여러개의 값을 리턴하는 것일 뿐 사실은 튜플 하나를 리턴한다는 뜻이다.

    def function(x, y, z):
    return x + y, y + z, x + z;


    val1, val2, val3 = function(1, 3, 5)

    그럼 얘는 어떻게 된건가? 얘는 파이썬이 "아 튜플의 각 값을 할당할 애가 3명이 있으므로 나눠서 줘야겠다"하고 알아서 리턴된 튜플의 첫번째 값 부터 하나씩 넣어 주는 것이다. 이것는 심지어 함수의 특성도 아니다. 이는 튜플의 문법적 특성이다.

    val = 4, 8, 6
    print(val) 실행 결과:

    (4, 8, 6)

    그리고

    val1, val2, val3 = (4, 8, 6)
    print(val1)
    print(val2)
    print(val3) 실행 결과: 4 8 6

    즉 파이썬 함수가 여러개의 값을 리턴 할 수 있다는 것은 거짓말이다. 콤마로 나누어 값을 선언하면 그녀석들은 튜플이 된다. 그러므로 함수가 리턴하는 것은 튜플 한개이다. 단지 튜플의 특성상 한 변수에 튜플 하나로 다 집어넣을수도, 또는 위처럼 여러개의 변수에 값을 나눠 넣을 수도 있어서 마치 함수가 여러개의 값을 리턴하는 것 처럼 보이는 것 뿐이다.

    이번 포스트를 통해 파이썬에서 여러개의 값을 리턴하는 방법과 실제로 그 리턴 값들이 무엇인지에 대해 알아보았다.



    댓글

f.software engineer @ All Right Reserved