관리 메뉴

정리왕

파이썬 함수 5 (함수의 결과값은 언제나 하나이다) 본문

6.개발/파이썬 공부하기

파이썬 함수 5 (함수의 결과값은 언제나 하나이다)

정리합니다 2020. 11. 29. 15:39
반응형

# 함수의 결과값은 언제나 하나이다

 

먼저 다음의 함수를 만들어 보자.

>>> def add_and_mul(a,b):
	return a+b, a*b

 

이 함수를 다음과 같이 호출하면 어떻게 될까?

>>> result = add_and_mul(3,4)

결과값은 a+b와 a*b 2개인데 결과값을 받아들이는 변수는 result 하나만 쓰였으니 오류가 발생하지 않을까?

당연한 의문이다. 하지만 오류는 발생하지 않는다. 그 이유는 함수의 결과값은 2개가 아니라 언제나 1개라는 데 있다.

add_and_mul 함수의 결과값 a+b와 a*b는 튜플값 하나인 (a+b, a*b)로 돌려준다.

 

 

따라서 result 변수는 다음과 같은 값을 갖게 된다.

result = (7, 12)

즉 결과값으로 (7, 12)라는 튜플 값을 갖게 되는 것이다.

 

 

 

만약 이 하나의 튜플 값을 2개의 결과값처럼 받고 싶다면 다음과 같이 함수를 호출하면 된다.

result1, result2 = add_and_mul(3, 4)

이렇게 호출하면 result1, result2 = (7, 12)가 되어 result1은 7이 되고,  result2는 12가 된다.

 

 

 

 

또 다음과 같은 의문이 생길 수도 있다.

>>> def add_and_mul(a,b):
	return a+b
	return a*b

>>> 

위와 같이 return문을 2번 사용하면 2개의 결과값을 돌려주지 않을까?

하지만 파이썬에서 위와 같은 함수는 참 어리석은 함수이다.

 

 

그 이유는 add_and_mul 함수를 호출해 보면 알 수 있다.

>>> result = add_and_mul(2, 3)
>>> print(result)
5

add_and_mul(2, 3)의 결과값은 5 하나뿐이다. 두 번째 return문인 return a*b는 실행되지 않았다는 뜻이다.

 

 

 

이 예에서 볼 수 있듯이 두 번째 return문인 return a*b는 실행되지 않았다. 따라서 이 함수는 다음과 완전히 동일하다.

>> def add_and_mul(a,b):
	return a+b

>>> 

즉 함수는 return문을 만나는 순간 결과값을 돌려준 다음 함수를 빠져나가게 된다.

 

 

 

 

*retrun의 또 다른 쓰임새

특별한 상황일 때 함수를 빠져나가고 싶다면 return을 단독으로 써서 함수를 즉시 빠져나갈 수 있다. 다음 예를 보자.

>>> def say_nick(nick):
	if nick == "바보":
		return
	print("나의 별명은 %s입니다." %nick)

	
>>> 

위 함수는 '별명'을 입력으로 전달받아 출력하는 함수이다. 이 함수 역시 반환 값(결과값)은 없다(문자열을 출력한다는 것과 반환 값이 있다는 것은 전혀 다른 말이다. 혼동하지 말자. 함수의 반환 값은 오로지 return문에 의해서만 생성된다).

 

 

만약에 입력값으로 '바로'라는 값이 들어오면 문자열을 출력하지 않고 함수를 즉시 빠져나간다.

>>> say_nick('야호')
나의 별명은 야호입니다.
>>> say_nick('바보')
>>> 

이처럼 return으로 함수를 빠져나가는 방법은 실제 프로그래밍에서 자주 사용한다.

 

 

반응형
Comments