파이썬과 함수 (2)
이 글의 작성자는 C/C++ 프로그래밍을 하던 사람이다. 이 글은 Python을 복습하며 작성하는 글이니, 부족한 부분이 있으면 얼마든지 피드백을 주시기 바란다.
함수 실행의 결과 : return
우리가 그동안 사용한 함수 중 print()와 sorted()를 생각해보자. 이 두 함수의 차이가 뭐가 있을까?
가장 먼저 떠오르는건 함수의 동작이 다르다는 것이다. print()는 다음과 같이 사용해서 ‘hi’라는 문자열이 출력되도록 하였다.
print('hi')
그리고 sorted()는 다음과 같이 사용해서 리스트 a의 정렬된 결과를 l이라는 변수에 받도록 하였다.
l = sorted(a)
잘 보면, sorted()와 print()의 차이가 하나 더 보일 것이다. 변수에 무언가를 대입하는 동작의 유무이다. sorted()의 경우 무언가를 l에다 대입하고 있지만, print()는 그런 동작이 없다. 이건 무엇을 의미하는 것일까?
결론만 말하자면, 함수도 하나의 값을 가질 수 있고, 가지지 않을 수도 있다. 그리고 함수의 값을 결정하는 키워드가 하나 있다. return이다.
return을 통해, 이 함수를 호출한 뒤, 어떠한 값을 가지게 할 지 결정할 수 있다. 한마디로, 함수의 실행결과 값을 return에다 집어넣으면 된다.
그러면 어떻게 하면 되는지 간단한 예시를 살펴보자. 두 매개변수를 받아서 더한 결과값을 돌려주는 함수를 만들어보자.
def plus(a, b):
return a+b
두 매개변수 a
와 b
를 받아서 a+b
의 결과물을 돌려주는 함수다. 그리고 함수를 실행한 결과도 살펴보자.
q = plus(2, 3)
w = plus(10, 2)
print(q, w)
출력 결과를 보면 5와 12가 나온 것을 확인할 수 있다.
sorted() 함수도 정렬된 객체를 생성한 후, 그 객체를 return하는 식으로 짜여져 있다.
None : 값이 없음
그러면 print() 함수는 결과가 무엇일까? 확인해보자.
a = print('hi')
print(a)
위의 코드를 실행했다면, ‘hi’와 함께 None이라는 글자를 볼 수 있을 것이다. 이걸 보면 print() 함수도 무언가의 결과를 주는 것 같긴 하다. 그런데 왜 print()의 결과에는 관심이 없는 것일까?
None이 의미하는 것은, 값이 없다이다. 정수도 아니고, 문자열도 아니고, 누군가가 만든 데이터 형도 아닌 그냥 값이 없다라는 단 하나의 의미만을 가지고 있다.
즉, print()의 실행 결과가 None이라는 것은 실행 결과 값은 없다라는 것을 의미한다.
만약 None이 조건문이나 반복문 등 condition에 들어가게 될 경우, False로 간주하게 된다.
a = None
if a :
print('True')
else :
print('False')
위의 코드는 ‘False’가 출력되는 것을 확인할 수 있을 것이다.
어떤 함수가 실행 결과 값이 없는 함수가 되는가? print()같이 굳이 이 함수의 실행 결과를 저장해야 할 필요가 없을 때 그리 될 수 있다.
print()를 쓰는 이유는 무엇인가? 객체의 값을 출력하기 위해서다. 그럼 객체의 값을 출력했으면 더 필요한 것이 있는가? 억지로 만드려면 만들 순 있겠지만, 사실 딱히 필요한 건 없다. 그러면 굳이 아무런 값을 만들어서 반환하기 보다는, 딱히 돌려줄 값이 없다. None을 반환, 즉 리턴하게 되는 것이다.
함수의 값을 반환한다 라는 말도 쓰긴 하지만, 아마도 리턴한다라는 말을 더 자주 들을 것이다.
함수의 결과를 None으로 만들기
그러면 None은 어떻게 리턴하게 될까? 간단하다. 그냥 return을 사용하지 않으면 된다.
def noReturn():
a = 2+3
위의 함수의 결과를 출력하면 None이 나오는 것을 확인할 수 있을 것이다.
아니면 명확하게 코드로 return None
을 해도 된다.
def returnNone():
return None
위의 함수의 결과를 출력해도 None이 나오는 것을 확인할 수 있을 것이다.
아니면 그냥 return만 써도 된다.
def returnNone():
return
위의 결과도 None이 되는 것을 확인할 수 있을 것이다.
Comments