파이썬 - 함수의 파라미터(매개변수)의 특징 알아보기

jomminii_before·2020년 1월 29일
1

파이썬의 함수 파라미터에는 Positional ArgumentsKeyword Arguments 두 가지 방식이 있습니다.

Positional Arguments(위치 인자)

Positional Arguments는 가장 기본적인 함수의 파라미터 형태로, 말 그대로 위치에 따라 인자가 함수 내부식에 대입됩니다.

def student_info(name, sex, age) :
  print(f"""
  이름 : {name}
  성별 : {sex}
  나이 : {age}
  """)

>>> student_info("고길동", "남자", 50)
이름 : 고길동
성별 : 남자
나이 : 50

# 단점 : 순서를 잘못 알면 원하는 결과 값이 나오지 않음
>>> student_info("고길동", 50, "남자")
이름 : 고길동
성별 : 50
나이 : 남자
  

위와 같이 student_info 함수의 인자로 들어간 name, sex, age 순서대로 결과 값이 반영됩니다. 인자의 수가 적을 때는 문제가 없지만, 만약 수가 많아져서 각 위치에 들어갈 값을 잘못 입력하게 되면, 두 번째 예시와 같이 원하지 않는 결과가 나올 수 있습니다. 이런 경우를 방지하기 위해서 다음에 설명할 Keyword Arguments 형태를 사용할 수 있습니다.

Keyword Arguments(키워드 인자)

Keyword Arguments는 순서가 아니라 각 인자에 대입된 값을 함수 내에 전달해 줍니다. 순서를 기억할 필요가 없는거죠. 다음 예시처럼 함수를 호출할 때 키워드 인자를 넣어주면, 아까와 같이 원하는 결과를 불러올 수 있습니다.

>>> student_info(age = 50, name = "고길동", sex = "남자")
이름 : 고길동
성별 : 남자
나이 : 50

Positional Arguments와 Keyword Arguments의 혼합

두 가지 형태의 인자를 한 함수에 혼합해서 사용할 수도 있습니다. 아래 예시를 보면 첫 번째 인자에는 위치 인자, 두 번째, 세 번째에는 키워드 인자를 사용해 함수를 호출했고, 성공했습니다.

>>> student_info("고길동", age = 50, sex = "남자")
이름 : 고길동
성별 : 남자
나이 : 50

한 가지 주의할 점은 위치 인자를 입력하는 부분에서는 순서를 지켜줘야한다는 점 입니다. 왜냐하면 키워드 인자가 나오는 순간부터 순서를 알 수 없게 되기 때문입니다. 그래서 위치 인자가 키워드 인자 앞에 나와야하고, 이 위치 인자들의 순서는 지켜져야합니다. 만약 순서를 지키지 않으면 아래와 같은 에러 메시지가 노출됩니다.

>>> student_info(age = 50, "고길동", sex = "남자")
SyntaxError: positional argument follows keyword argument

파라미터의 default 값 설정

함수를 정의할 때 각 파라미터의 default 값(기본 값)을 지정해 놓을 수도 있습니다. 해당 인자에 넣을 값을 모르거나 넣을 값이 없을 경우, 함수가 반환될 때 기존에 설정한 default 값이 대신 노출되게 하는 기능입니다.

아래 예시와 같이 기존에 함수를 정의할 때 넣어둔 매개변수의 수 만큼 인자를 입력하지 않으면, 인자가 더 필요하다는 에러 메시지가 나타납니다.

>>> student_info("고길동", age = 50)
Traceback (most recent call last):
  File "<pyshell#22>", line 1, in <module>
    student_info("고길동", age = 50)
TypeError: student_info() missing 1 required positional argument: 'sex'

반면에 함수를 아래와 같이 age에 default 값을 주고 재정의한 후, age인자 없이 함수를 호출하면 기존에 설정한 default 값이 노출되는 것을 확인할 수 있습니다.

def student_info(name, sex, age="모름") :
  print(f"""
  이름 : {name}
  성별 : {sex}
  나이 : {age}
  """)
  
>>> student_info("고길동", sex = "남자")
이름 : 고길동
성별 : 남자
나이 : 모름             # default 값 노출

이렇게 끝이면 좋겠는데 default 값을 활용할 때도 주의할 점이 있습니다. 함수를 정의할 때 default 값 파라미터를 non-default 값 파라미터 앞에 선언하면 안된다는 점 입니다. 아래와 같이 default 값 파라미터를 앞에 선언하면, SyntaxError가 뜨면서 함수가 선언되지 않습니다.

def student_info(name = "무명", sex, age) :
  print(f"""
  이름 : {name}
  성별 : {sex}
  나이 : {age}
  """)
> Traceback (most recent call last):   
    File "python", line 1 
SyntaxError: non-default argument follows default argument

왜냐하면 default 값 파라미터가 앞에 선언되어버리면, 이후에 함수를 호출할 때 입력한 특정 인자가 어떤 파라미터에 대입되는지 알 수 없기 때문입니다. default 값 파라미터 자체가 입력이 될 수도, 안될 수도 있는 값이기 때문에, 정확히 원하는 값을 반환하는데 어려움이 있습니다.

profile
https://velog.io/@jomminii 로 이동했습니다.

0개의 댓글