파이썬 함수 리턴 - paisseon hamsu liteon

1. return의 역할

[역할1] 함수 호출 부분을 return 뒤에 작성으로 반환시킨다.

파이썬 함수 리턴 - paisseon hamsu liteon
return 예시 1

예를 들면, 왼쪽 이미지 속 3,4번 절차에 해당된다. 

4번째 행 'print(f(3))' 로 인해 함수 f(x) 가 호출된다. 호출된 함수 f(x) 는 return 뒤 x + 1 값을 반환시키게 된다. 이때, f(3) 에서 x = 3으로 정의되었기 때문에, x = 3 을 대입한 결과 값 4를 반환하게 된다.

그 결과 최종적으로 print(f(3)) = print(4) 가 되어 4가 출력이 되는 것이다.

[역할2] 현재 함수의 실행을 멈추고 함수 호출이 끝나는 지점부터 다시 진행한다.

파이썬 함수 리턴 - paisseon hamsu liteon

return 의 2번째 기능은 호출된 함수를 끝내는 것이다.

def 로 정의된 함수 내에서 return 이 나오면 함수가 종료된다고 이해하면된다.

예를 들어, 4행의 print(f(3)) 으로 인해 1행에 있는 def f(x) 가 호출되었다고 하자.

이때 return 은 호출된 함수 f(3) 에 대해 4를 반환 시킨 뒤에, return의 역할을 완전 수행했으니 함수가 종료되었다고 생각하는 것이다.

결과적으로 3행에 작성된 return 뒤 print("마늘떡볶이") 는 실행되지 않아 결과값으로 출력되지 않으며, 이렇게 return 뒤에 위치하고 있어 수행되지 않는 코드르 Dead Code 라고 지칭한다.


2. print()의 역할

print 뒤 () 내에 적힌 값을 출력하는 명령어

만약 print 가 선언되지 않으면, 콘솔 창에 결과 값이 출력되지 않는다. 예를 들어, 아래와 같이 작성된 경우, print에 대한 선언이 없기 때문에 콘솔 창에 값이 출력되지 않을 것이다.

def f(x)
	return (x + 2) 
   
f(3)

3. return vs print 기능 비교

(1) print는 출력 값을 보여주는 기능이며, 출력 값 생성을 위해 함수를 호출하게 된다.

(2) return은 정의된 함수에 대한 호출이 있을 때 값을 반환시켜주는 기능이다.

(2) 모든 함수는 어떤 값을 return 해야한다. 이때 함수 내에 반환값인 return이 정의되지 않은 경우 None을 결과 값으로 뱉어내게 된다. (아래 4번 내용 참고)


4. 함수 내 return이 정의되지 않은 경우

return 은 함수를 종료 시켜주는 역할을 수행한다. 그런데 만약 함수 내에 return 에 대한 정의가 없다면 어떻게 될까?

이런 경우에는 결과값으로 None 을 반환하도록 되어 있다.

파이썬 함수 리턴 - paisseon hamsu liteon
return이 정의되지 않은 경우

위 예시를 보면, 결과 값으로 4와 None 이 출력된 것을 볼 수 있다.

- 결과값 4는 def 함수 속 print(x+2) 의 결과로 4가 출력된 것이다.

- 결과값 None 은 def 함수가 모두 실행되었지만 return에 대한 정의가 없어 반환한 값이다.

1. 함수

  • 함수(function)는 끊임없이 재사용할 수 있는 코드 기반 요소와 같습니다.
  • 어떤 일을 수행하는 코드 덩어리 즉, 더 큰 프로그램을 제작하는 데 사용할 수 있는 작은 조각을 의미합니다.
  • def 키워드를 이용해 함수를 생성 즉, 정의(define)합니다.
  • 함수의 이름을 이용해 함수를 사용, 즉 호출(call)합니다. 
  • 함수를 사용하면 소스코드 수정, 기능, 재사용 등에 용이합니다.

def 함수이름( ) :

    이 함수가 할 일

로 실행시킬 수 있습니다.

파이썬 함수 리턴 - paisseon hamsu liteon
함수 생성과 호출

-> def 블록 안의 코드는 주 프로그램의 일부가 아니므로 프로그램이 실행될 때 해당 부분은 건너뛰고 def 블록 안에 있지 않은 첫 번째 줄을 실행하기 시작합니다. 즉, 마지막 줄( myAddress( ) )이 주 프로그램입니다.

2. 함수에 인자(argument) 전달하기

  • 인자(argument)란 함수에 전달하는 정보를 의미합니다.
  • 보통 매개변수(parameter)와 바꿔 쓸 수 있습니다.
  • 어떤 값을 받을 것인가와 자료형이 중요합니다!
파이썬 함수 리턴 - paisseon hamsu liteon
인자가 하나인 함수
파이썬 함수 리턴 - paisseon hamsu liteon
인자가 두 개 이상인 함수

3. 값을 반환하는 함수

함수에 정보(인자)를 전달할 수 있는 것처럼, 함수에서도 호출자에게 정보를 보낼 수 있습니다.

파이썬 함수 리턴 - paisseon hamsu liteon

* return value란?

함수로부터 전달되는 값을 결과(result) 또는 반환값(return value)라고 합니다. 값을 반환하는 함수를 만들 때는 함수 안에서 파이썬의 return키워드를 사용합니다.

*return의 두 가지 의미

함수의 종료 (아래의 소스코드는 실행시키지 않고 함수를 끝낸다)와 값의 반환 (함수를 끝냄으로써 이 값을 반환한다)가 있습니다.

∨ 위 예제에서는 y 값을 프로그램에서 해당 함수를 호출한 부분으로 보낼 것입니다. 그럼 이 값은 어디로 보내질까요? 반환된 값은 함수를 호출한 코드로 돌아갑니다.

nameOfFunction 함수는 7이라는 값을 반환했으며 이 값은 output에 할당되었습니다.

파이썬 함수 리턴 - paisseon hamsu liteon
함수를 여러개 만든 후 return 값을 각각 호출할 수 있습니다.
파이썬 함수 리턴 - paisseon hamsu liteon
여러개의 값을 동시에 반환할 수도 있습니다.

# 값 반환하기 예시

파이썬 함수 리턴 - paisseon hamsu liteon
값을 반환하는 함수를 만들고 사용하기 (python2.x)

-> total처럼 함수 안에 들어 있는 변수뿐 아니라 totalPrice처럼 함수 밖에도 변수가 있습니다. 이 두 변수는 같은 것을 가리키는 두 개의 이름에 불과합니다.

*유효 범위(scope)

변수가 사용되는(또는 변수를 사용할 수 있는) 프로그램의 영역을 의미합니다.

*지역변수

위 예제에서 price와 total 변수는 함수 내에서만 사용됩니다. 이때 price, total, tax_rate가 calculateTax( ) 함수의 유효 범위 안에 있다고 표현하고, 지역(local)이라고 합니다. 즉, price, total, tax_rate 변수는 calculateTax( ) 함수 내에서 지역 변수(local variable)에 해당합니다. 함수가 실행을 마치면 지역변수는 파괴됩니다.

*전역변수 

지역변수들과 달리 예제의 my_price와 totalPrice는 함수 밖, 즉 프로그램의 주 영역에 정의되어있습니다. 유효 범위가 더 넓은 변수를 가리켜 전역(global)이라는 용어를 사용합니다. 이 변수들은 프로그램의 어디서도 사용할 수 있기 때문에 이 변수들을 전역 변수(global variable)라고 합니다.

4. 함수 내에서 전역 변수 수정하기(python2.x)

파이썬 함수 리턴 - paisseon hamsu liteon
파이썬 함수 리턴 - paisseon hamsu liteon

-> 함수 내에서 전역 변수를 변경하려고 하면 파이썬이 그 대신 새로운 지역 변수를 만들어 냅니다. 위 예시에서 def 블록 안의 my_price와 주 프로그램의 my_price는 다른 메모리에 존재합니다. 이는 함수에서 우연히 전역 변수를 변경하는 것을 방지하기 위해서입니다. 함수 안에서 전역 변수를 변경하고 싶을 때는 global이라는 키워드를 사용해야 합니다.

※ 주의점

파이썬 함수 리턴 - paisseon hamsu liteon
이렇게 코드를 짜면,
파이썬 함수 리턴 - paisseon hamsu liteon
에러가 뜬다.

-> name 'total' is not defined 이유 : 함수가 실행을 마치면 지역변수는 파기되기 때문에 'total'역시 파기되어 데이터가 정의되어 있지 않습니다.

** 올바른 방법

파이썬 함수 리턴 - paisseon hamsu liteon
변수선언
파이썬 함수 리턴 - paisseon hamsu liteon

참고문헌 : 위렌 산데/ 카터 산데, 헬로! 파이썬 프로그래밍, 위키북스, 2015

'프로그래밍 > Python 프로그래밍 기초' 카테고리의 다른 글

7. 파이썬 기초 (객체 초기화, __itit__, initializing, 특수 메서드, __str()__ , self , class 예시)  (1)2021.02.11
6. 파이썬 기초 (객체 object, 클래스 class, 인스턴스 instance, 속성 attribute, 메서드 method)  (0)2021.02.03
4. 파이썬 기초 (파이썬 반복문, for 반복문, range, while 반복문, break, continue)  (0)2021.01.22
3. 파이썬 기초 (파이썬 조건문, condition, 연산자, if, elif, else)  (0)2021.01.21
2. 파이썬 기초 (파이썬 자료형, 숫자형, 연산, 문자열, string, 인덱스, 변수, variable, 할당 )  (0)2021.01.20