31. 파이썬 입출력값에 따른 함수의 형태 – 다섯번째

파이썬 입출력값에 따른 함수의 형태에 대해 계속 공부해 나가겠습니다.

파이썬 입출력값에 따른 함수의 형태

지난 포스팅에 함수는 return 문을 만나면 리턴값을 돌려주고 함수를 빠져나간다고 했습니다
이번 포스팅에서는 return 문의 또 다른 쓰임새부터 매개변수에 초깃값 미리 설정하는 방법까지 공부해 보겠습니다

return 문의 또 다른 쓰임새

상황에 따라 함수를 빠져나가고 싶다면 return 을 단독으로 사용해 함수에서 바로 빠져나갈 수 있습니다.

Python
>>> def say_nicknm(nicknm):
...     if nicknm == "바보":
...         return
...     print("당신의 별명은 %s 입니다." % nicknm)
...
>>>

위에 예로 든 코드는 ‘별명’을 입력 받아서 출력 하는 함수 입니다. 여기서 생성한 say_nicknm 함수 역시 리턴값은 없습니다(전에 진행했던 포스팅에서 문자열을 출력한다는 것과 리턴값이 있다는 것은 다른 의미인 걸 공부했었습니다.
28. 파이썬 입출력값에 따른 함수의 형태 – 두번째 시간
헷갈리지 말아야 할게 함수의 리턴값은 무조건 return 문에 의해서만 생긴다는 것을 명심해야 합니다.

위 코드에서는 “바보”라는 문자열이 들어오면 문자열을 출력하지 않고 함수를 바로 빠져나가게 됩니다.

Python
>>> say_nicknm('천재')
당신의 별명은 천재 입니다.
>>> say_nicknm('바보')
>>>

위 코드 실행결과 처럼 nicknm 에 ‘바보’라는 문자열이 들어오는 순간 바로 종료하게 됩니다.
이렇게 return 을 이용해 함수를 빠져나가는 구현방식은 실제 프로그래밍을 할때 자주 사용됩니다.

매개변수에 초기값 설정해 놓기

이번에는 좀 다른 형태의 함수 인수 전달 하는 방법입니다.
매개변수에 초기값을 미리 설정해 놓는 경우입니다.

Python
>>> def say_myinfo(name, age, man=True):
...     print("저의 이름은 %s 입니다." % name)
...     print("저의 나이는 %d 살 입니다." % age)
...     if man:
...         print("저는 남자입니다.")
...     else:
...         print("저는 여자입니다.")
...

위 코드를 보면 say_myinfo 함수의 매개변수가 name, age, man=True 으로 3개가 설정이 됩니다. 그런데 man=True 처럼 매개변수에 미리 값을 넣어줬습니다.
이 방법이 매개변수에 초기값을 미리 설정하는 방법입니다.
위 코드를 해석하면 say_myinfo 함수가 3개의 매개변수를 받아서 마지막 인수인 man 이 True 인 경우에는 “저는 남자입니다.” False 이면 “저는 여자입니다.” 를 출력하게 되어 있습니다.
실제로 say_myinfo 를 사용해 보겠습니다.

Python
>>> say_myinfo('파이썬', 15)
저의 이름은 파이썬 입니다.
저의 나이는 15 살 입니다.
저는 남자입니다.

위 실행 결과처럼 매개변수에 2개를 주면 name 에는 ‘파이썬’, age 에는 15 숫자가 대입됩니다. 그리고 man 이라는 변수에는 아무 입력이 없었기에 초기값 True 를 가지게 되는 것입니다.

Python
>>> say_myinfo('파이썬', 15, False)
저의 이름은 파이썬 입니다.
저의 나이는 15 살 입니다.
저는 여자입니다.

똑같이 진행 해 보되 man 매개변수 값에 False 값을 대입해 봤습니다. man = False 가 되기에 else 문을 만나 ‘나는 여자입니다’ 문장이 출력 되는 걸 확인 할 수 있습니다.

매개변수에 초기값 설정할 때 주의할 점

Python
>>> def say_myinfo(name, man=True, age):
  File "<stdin>", line 1
    def say_myinfo(name, man=True, age):
                                   ^^^
SyntaxError: non-default argument follows default argument

위 코드 처럼 age 와 man 의 매개변수 위치를 바꿔보았습니다.
함수의 다음 부분은 입력도 못하고 오류가 발생했습니다.
위처럼 코드를 작성하게 되면 name 다음에 나이를 입력 하려고 할 때 파이썬 인터프리터가 어디에 대입해야 할지 판단하기가 어려워 오류를 발생시키게 되는 것입니다.

오류메세지 내용 ‘SyntaxError: non-default argument follows default argument’ 은 초기값 없는 매개변수(age)는 초기값이 있는 매개변수(man) 뒤에 사용할 수 없다는 의미입니다.
결론적으로 (name, age, man=True)는 허용되지만 (name, man=True, age) 는 허용이 안된다는 것입니다.
초기값을 설정하고 싶은 매개변수는 항상 뒤쪽에 위치해야 하는 걸 명심해야 겠습니다.

  • 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
31. 파이썬 입출력값에 따른 함수의 형태 – 다섯번째

댓글 남기기