#python #anaconda #jupyter-notebook #visual-code #html #css #javascript #http

제목"출력은 답이랑 같은데 assert하면 안돼요" - return 반환과 print 출력의 차이 이해2020-04-07 00:39
작성자

많은 학생분들이 함수 구현에 있어 반환과 출력을 혼동하기에 본 글을 작성합니다.


기본적으로 함수라는 것은 수학의 함수와 크게 다를 바 없습니다.


Higher Order Functions and Currying - GeeksforGeeks 


기본적으로 들어가는 정의역 / 입력값이 있으면, 함수 본문을 구성하는 구문들이 실행된 다음, 치역 / 반환값을 반환합니다.


예시를 보겠습니다


mb-file.php?path=2020%2F04%2F07%2FF786_%ED%95%A8%EC%88%981.png

위의 함수를 먼저 보겠습니다.

inputValue라는 값을 입력으로 받고 있고, 해당 값을 3배 해준 다음, 3배해준 결과값을 그대로 반환하고 있습니다.


그렇기 때문에 ReturnsValue(3)라는 함수호출은 3을 입력값으로 넣어주므로 반환값은 3 * 3, 즉 9일 것입니다.

해당 값을 functionResult라는 변수에 저장해주고 해당 값이 정말 9인지 확인해주기위해 콘솔창에 출력해주었습니다.


다른 함수를 보겠습니다.

mb-file.php?path=2020%2F04%2F07%2FF787_%ED%95%A8%EC%88%982.png
위의 함수와는 약간 다릅니다. 위의 함수는 순수하게 숫자만을 반환했다면, 이번 함수는 숫자를 출력하고, 해당 출력문을 반환까지 해줍니다.


하나 하나 해석해보겠습니다.


우선 functionResult에 PrintsValue(3)라는 함수 호출의 반환값을 할당해주겠습니다. 할당연산자의 연산 순서는 오른쪽에서 왼쪽이므로 오른쪽이 먼저 평가가 됩니다.

PrintsValue(3) 함수호출이 되었습니다. 입력값은 3입니다. 해당 값에 3을 곱해주고, print(inputValue)를 통해 3 * 3 = 9라는 값을 출력해주었습니다. 이 때 이 print 문을 return하려고 합니다.

근데 print 함수는 무슨 값을 return하는지 알아야 그 값을 그대로 받아서 PrintsValue라는 함수의 return 값을 알 수 있습니다.

print 함수는 헌데 아무 것도 반환하지 않는 함수입니다. 그렇기 때문에 반환값이 "None" 입니다. 즉, inputValue가 얼마든지간에, print 함수를 반환한다는 것은 무조건 print 함수의 반환값인 None을 반환한다는 의미입니다. 이를 확인해주기 위해 해당 반환값을 최종적으로 functionResult에 할당연산자를 이용해 저장해주겠습니다.


확인해주기 위해 functionResult를 출력해보았습니다. 출력 결과는 None입니다.


mb-file.php?path=2020%2F04%2F07%2FF788_%ED%95%A8%EC%88%983.png

정말로 반환값이 없는 함수의 반환값이 None인지 확인을 해보겠습니다.


위의 함수는 "Function Called"라는 문자열을 출력할 뿐, 그 어떠한 것도 반환하지 않습니다. 해당 함수를 print해보겠습니다.


print를 하게되면 ReturnsNothing()이라는 함수가 평가됩니다, 즉 함수 호출이 됩니다. 그렇게 되면 함수 본문에 있는 출력문이 실행되지만, ReturnsNothing 함수는 출력값이 없기 때문에 None을 반환합니다. 즉, print(ReturnsNothing())은 결국 print(None)이 됩니다.


결과는 콘솔창으로 확인 가능합니다.


댓글
이전birthday 관련 질문입니다!2020-04-06
다음실습자료 오류2020-04-07