7. 함수 > 7-2. 함수 만들기

함수 만들기

해당 파트는 아래 영상 시청 후 교안을 정독해주세요.

전 파트에서 함수의 형태에 대해 배우며 함수 구성 요소들에 대해 대충 파악하셨을 텐데요, 이번 파트에서는 보다 자세하게 함수를 만드는 법에 대해 배워보고자 합니다. 내용적으로 겹치는 부분들이 존재하지만, 그만큼 중요한 내용이라 생각하시고 숙지하시기 바랍니다!

함수를 정의하는 def, lambda

앞서 살펴본 함수의 형태에서 설명하지 않고 넘어간 부분이 있는데요, 바로 def 입니다. 함수를 만들고자 할 때 우리는 def 라는 예약어를 사용합니다. 그러나 파이썬에서 함수를 만드는 예약어에는 def 만 존재하는 것은 아닙니다. lambda 라는 예약어를 통해서도 함수를 정의할 수 있는데요, deflambda 는 함수를 정의하는 방법에서 차이를 보입니다.

def 로 함수 정의하기

def 로 함수를 정의하는 방법은 아래와 같습니다.

def 함수명 (매개변수):
  수행문
  수행문
  ...
  return 출력값

def 로 함수를 만들 경우 return을 사용하지 않을 수도 있으며, 이 경우 출력값은 존재하지 않습니다.

아래는 def 를 사용한 실제 함수 예시입니다.

def plus (a, b):
  c = a + b
  return c

plus(5,6) #반환값 11 

lambda 로 함수 정의하기

lambda 로 함수를 정의하는 방법은 아래와 같습니다.

함수명 = lambda 매개변수 : 수행문

lambda 로 함수를 정의한 식과 def 로 함수를 정의한 식에서 가장 눈에 띄는 차이점은 뭘까요? lambda 는 한 줄로 함수를 정의한다는 점일 겁니다. 추가로 lambda 의 경우 return 을 사용하지 않으며, return 없이도 수행문의 결과값을 출력(반환)합니다.

이러한 특성으로 인해 lambda줄바꿈을 하지 못하는 상황에서 함수를 만들 때나 보다 간단한 함수를 만들 때, 구조상 def 사용이 불가능할 때 사용됩니다. 실 사용시에는 함수명에 함수 내용을 할당하기보다는 바로 lambda 문을 삽입하는 경우가 많다는 점 역시 알아두시면 좋습니다.

아래는 lambda 를 사용한 실제 함수 예시입니다.

plus = lambda a, b : a + b

plus(5,6) #반환값 11

본 커리큘럼은 일반적인 파이썬 프로그래밍의 관점에서 진행되기에 lambda 보다는 def 를 중점적으로 살펴보지만, 데이터 사이언스를 공부하기 시작하시면 def 만큼이나 lambda 를 많이 사용하시게 됩니다. 반드시 기억해주세요!

입력값과 반환값

입력값

def square(a):
  b=a**2
  return b

square(7) #반환값 49

매개변수는 말 그대로 값을 받는 변수입니다. 위 함수식에서는 a가 매개변수라 할 수 있겠네요. 인수는 매개변수에 들어갈 입력값을 지칭합니다. 위 예시에서는 7이 인수라 할 수 있겠습니다.

입력값이 없는 함수

그러나 입력값이 없는 함수도 존재합니다. 예시를 통해 살펴봅시다.

def return_2022():
  return 2022

return_2022() #반환값 2022

입력값을 아무것도 받지 않고- 묻지도 따지지도 않고 2022라는 숫자를 반환하는 함수입니다. 입력값이 없이 반환값만 있는 것이죠. 이처럼 함수의 입력값은 아예 존재하지 않을 수 있습니다.

다만 이렇게 입력값이 없는 경우, 매개변수도 없어야 함을 기억해야 합니다. 매개변수를 지정해놓고 인수- 즉 입력값을 적지 않는 행위는 에러라는 결과를 낳기 때문입니다. 그러나 매개변수와 인수의 개수가 맞지 않아도 에러가 나지 않는 경우가 있는데, 바로 인수의 초기값을 설정해주었을 경우입니다. 인수의 초기값을 설정해주는 방법은 아래 반환값이 없는 함수를 배운 이후에 살펴보겠습니다.

반환값

def square(a):
  b=a**2
  return b

square(7) #반환값 49

함수의 결과값을 지칭하는 반환값은 return 예약어 뒤에 위치합니다. 위 함수식에서는 변수 b가 반환값을 나타내는 변수이며, 실 사용 예시에서는 49가 함수의 반환값이라 할 수 있습니다.

반환값이 없는 함수

반환값이 없는 함수 역시 존재합니다. 예시를 통해 살펴봅시다.

def print_square(a):
  print(a**2)
  
print_square(7) #반환값 없음

위 함수는 예약어 return 이 없기 때문에 반환값 역시 존재하지 않습니다. 그러나 함수를 실행하면 수행문이 작동하는데, 수행문이 a**2print 하는 것이기 때문에 함수 실행시 49라는 숫자가 출력됩니다. 반드시 기억해야할 점은, 이 49라는 숫자는 함수의 반환값이 아닌 함수의 수행문의 결과라는 점입니다. 이처럼 반환값이 존재하지 않지만 수행문을 통해 특정한 결과를 만들어내는 함수가 존재한다는 점을 기억해주세요!

인수의 초기값 설정

def print_address(state, city, country="Korea"):
    print("제가 사는 지역은 %s입니다." %state)
    print("제가 사는 도시는 %s입니다." %city)
    print("제가 사는 나라는 %s입니다." %country)

print_address("Illinois", "Chicago", "US")
#제가 사는 지역은 Illinois입니다.
#제가 사는 도시는 Chicago입니다.
#제가 사는 나라는 US입니다.
print_address("서울특별시", "서울")
#제가 사는 지역은 서울특별시입니다.
#제가 사는 도시는 서울입니다.
#제가 사는 나라는 Korea입니다.

위 예시를 살펴봅시다. 방금 위에서 살펴본 것처럼 반환값 없이 수행문만 실행되는 함수입니다. 이때 함수는 state, city, country 3가지의 매개변수를 가집니다. 첫번째 함수 사용 예시를 보니 3가지 매개변수에 맞추어 3가지 인수를 모두 잘 적어주었고, 결과 역시 에러 없이 잘 출력된 것을 알 수 있습니다. 그런데 두번째 예시를 보니 이상합니다. 매개변수는 3개인데 인수는 2개 뿐이니 에러가 나야 하는데, 실제 결과는 모두 잘 출력된 것을 알 수 있습니다. 이는 앞서 함수를 정의할 때 인수의 초기값을 설정해주었기 때문입니다.

인수의 초기값을 설정하는 방법은 간단합니다. 마지막 매개변수default로 원하는 값을 할당해주면 끝이거든요. 위 예시에서는 마지막 매개변수인 country 에 Korea라는 값을 할당해준 것을 볼 수 있습니다.

입력값과 반환값이 모두 없는 함수

당연하게도, 입력값과 반환값이 모두 없는 함수 또한 존재합니다. 수행문만 실행하는 함수들이 그 주인공인데요, 아래 예시를 통해 살펴봅시다.

def print_2022():
  print(2022)
  
print_2022() #반환값 없음

함수 print_2022() 는 입력값도, 반환값도 없지만 해당 함수를 실행하면 2022라는 숫자가 출력됩니다. 이처럼 함수는 입력값, 수행문, 반환값이 매우 밀접한 관계를 가질 수도, 서로 관계가 전혀 없을 수도 있답니다. 전자의 경우가 대부분이지만 후자의 경우 역시 자주 등장한다는 점을 숙지해둡시다.

정리하자면, 함수는 0개 이상의 입력값을 가질 수 있으며, 0개 혹은 1개의 반환값을 갖습니다.

마지막으로 업데이트 된 날짜:
2022년 9월 24일