10. 파이썬 - return1
1. 서론
여기 코드 하나가 있다.
def square(x):
print("함수 시작")
return x * x
print("함수 끝")
print(square(3))
print("Hello World!")
배운대로 생각해보자.
1. 먼저 square함수를 불러오게 된다.
2. 함수를 불러오는 괄호 안에 있는 정수 3이 파라미터 x에 들어가면서 함수가 동작된다.
3. 먼저 print("함수 시작")을 출력하고 파라미터 x에 들어간 3은 x * x라는 식에 의해 9를 반환하고
4. print("함수 끝")을 출력하고 함수가 종료된다.
5. print("Hello World!")를 출력하고 프로그램이 종료 된다.
결과
함수 시작
9
함수 끝
Hello World!
가 나올 것이다!!
하지만 결과를 살펴보면?
"함수 끝"이 출력되지 않았다. 왜 그런걸까??
2. 본론
위 코드를 이해하기 위해선 return이 어떻게 동작하는지 알아야 한다.
return이란?
무언가를 돌려주는 것!
함수가 어떤 값을 돌려준다는 뜻이 된다.
예시를 보자.
def square(x): # 1-2. 파라미터 x에 3이 들어감.
return x * x # 1-3. 각각 x에 3이 들어가며 return 3 * 3이 되며 9를 반환하고 함수를 종료
print(square(3)) # 1-1. 함수 불러오면서 정수 3을 파라미터 x에 넘겨줌.
# 2. 반환받은 9를 출력하면서 프로그램 종료
print함수 괄호 안에서 square함수에 있는 x에 3이라는 파라미터를 보냈다.
return함수에 의해서 3 * 3의 값인 9가 반환되어
결과적으로 print(9)가 되어
9가 출력되게 된다.
이렇게 간단한 return문에는 역할이 더 있다.
위 예시처럼 값을 돌려주는 것 말고도
함수를 즉시 종료시키는 역할도 한다.
이러한 기능을 알고 다시 서론에서 본 코드를 다시 보자.!!
def square(x):
print("함수 시작")
return x * x
print("함수 끝")
print(square(3))
print("Hello World!")
1. print(square(3))부터 실행되어 square 함수에 있는 파라미터 x에 정수 3이 보내진다.
2. print("함수 시작")이 실행되며 함수 시작 이라는 문자열이 출력된다.
3. return x * x에 보내진 3 파라미터가 들어가며 3 * 3의 값이 반환(return)된다
그러면 함수 호출 부분이 9로 대체되며 9가 출력된다.
4. return문은 값을 반환하는 역할 뿐만 아니라 함수를 종료시키는 역할도 하기 때문에 함수가 종료된다.
5. print("Hello World!")가 실행되며 Hello World! 라는 문자열이 출력된다.
그러면 print("함수 끝") 이 코드는 어떻게 될까?
return문에 의해서 절대 사용될 리가 없는 코드가 되어버린다.
이를 의미 없는 코드라 하여 dead Code라고 한다.
실제로 pyCham을 사용하면
이러한 경고가 나온다.
3. 결론
예제 하나를 풀어보자.
def exit_function():
print(1)
print(2)
print(3)
print(4)
print(5)
print(6)
exit_function()
결과
위와 같은 결과를 내고 싶다. 물론 print(4)아래로 지워도 결과가 나온다.
하지만 우리는 return의 성질을 배웠다. return "끝"을 적절한 위치에 넣어보자!!
정답:
def exit_function():
print(1)
print(2)
print(3)
return "끝"
print(4)
print(5)
print(6)
exit_function()
근데 한가지 의문이 든다.
왜 '끝' 이라는 문자열은 출력되지 않을까?
exit_function()이 함수를 불러오면서 이 함수안에 print()함수가 작동하면서 1, 2, 3이 출력된다.
끝 이라는 문자열이 나오기 위해선 print( exit_function()) 처럼 해주어야 한다.
def exit_function():
print(1)
print(2)
print(3)
return "끝"
print(4)
print(5)
print(6)
print(exit_function())