Python 분석과 프로그래밍/Python 프로그래밍

[Python] 함수 return 문 : 호출자에게 값 반환

Rfriend 2018. 7. 6. 23:31

이번 포스팅에서는 함수의 호출자(caller)에게 코드를 실행시킨 후의 값(result)을 반환해주는 return 문에 대해서 3가지 유형으로 나누어서 소개하겠습니다. 


(1) return + result => 호출자에게 result 반환

(2) no return & no result => code_block 실행 후 종료 (None 반환)

(3) return (no result) => 함수 즉시 종료




첫번째의 return + result 문은 함수를 사용할 때의 일반적인 형태로서 이미 친숙할 것이라고 예상합니다. 두번째와 세번째는 좀 낯설 수도 있는데요, 이번 포스팅에서 예를 들어가면서 자세히 설명해보겠습니다. 



  (1) return + result => 호출자에게 result 값 반환


아래에 my_sum(3, 5) 함수를 호출하여 sum_all = 3 + 5 = 8 의 result 값을 sum_result 에 반환(return)한 예시입니다. 



In [1]: def my_sum(num1, num2):

   ...:     sum_all = num1 + num2

   ...:     return sum_all;


In [2]: sum_result = my_sum(3, 5)


In [3]: sum_result

Out[3]: 8

 




  (2) no return & no result => code_block 실행 후 종료 (None 반환)


다음으로 함수의 마지막 부분에 return 문을 사용하지 않을 경우, 함수 안의 code_block 만 실행할 뿐 호출자에게는 None을 반환합니다 (즉, 아무값도 반환하지 않음). 


이때 함수를 실행한 후의 결과값을 저장한 객체는 "None Type"이 됩니다. 



In [4]: def my_sum2(num1, num2):

   ...:     sum_all = num1 + num2;


In [5]: sum_result2 = my_sum2(3, 5)


In [6]: sum_result2


In [7]: type(sum_result2) # None

Out[7]: NoneType

 



아래의 예제와 같이 하나의 함수 안에 2개의 return 문을 사용할 수도 있습니다. 하지만 이럴 경우 의도치 않게 실수로 버그를 만들 수도 있으므로 가급적 하나의 return 문을 사용하는 것이 좋습니다. 아래의 예제에서는 argument 로 '0' 값을 받을 경우 return 문이 실행되지 않기 때문에 (의도치않게) None 을 반환하고 있습니다. 



In [8]: def my_abs(num):

   ...:     if num > 0:

   ...:         return num

   ...:     elif num < 0:

   ...:         return (-1)*num;


In [9]: abs_result = my_abs(-1)


In [10]: abs_result

Out[10]: 1


In [11]: abs_result = my_abs(0)


In [12]: abs_result   # no result


In [13]: type(abs_result)   # None

Out[13]: NoneType

 




  (3) return only (no result) => 함수 즉시 종료


마지막으로 return 문만 있고 뒤에 result 가 없는 경우입니다. 이럴 경우에 return 문은 함수 호출자에게 값을 반환(return)하는 의미로 쓰인 것이 아니고 함수를 종료(close)시키는 의미로 쓰였다고 보면 됩니다.  


아래의 예에서는 code block에 i를 loop 돌면서 프린트하는 실행문이 들어있으며, 만약 i 가 1부터 하나씩 증가하다가 3이 되면 return 문을 맞닥드려서 함수를 종료시켜버리는 함수입니다.  따라서 my_print(10) 을 실행시켰을 때 1, 2, 3 까지만 프린트가 실행이 되고 거기서 중단이 되었기 때문에 나머지 4 ~ 10까지는 프린트가 안되었습니다. 



In [14]: def my_print(num):

    ...:     for i in range(1, num+1):

    ...:         print(i)

    ...:         if i == 3:

    ...:             return;


In [15]: my_print(3)

1

2

3


In [16]: my_print(10)

1

2

3

 


많은 도움이 되었기를 바랍니다. 


728x90
반응형