함수는 input parameter를 받아서 return 값을 output으로 리턴한다.
함수를 호출할때 parameter를 함수에 건내주어서(pass)호출 할 수 있다.
함수의 parameter에는 여러 형태가 있다. 다음 예시는 가장 기본적인 형태인
순서대로 값이 parameter로 함수에 전해지는 경우이다.
def set(burger, potato): print(f"{burger}, with{potato}") set("버거","감자") #출력 "버거 with 감자"
하지만 위의 경우 처럼 순서에 맞추어서 parameter 값을 전해주지 않을 수 있는 방법도 있다. 순서 대신에 parameter 이름으로 맞추어서 값을 전해줄 수 있으며,
이를 keyword arguments 라고 한다.
keyword arguments 방식으로 parameter 값을 전해주면 실제 parameter 순서가
바뀌어도 괜찮다.
def set(burger, potato): print(f"{burger}, with{potato}") set(potato = "감자", burger = "버거") #출력 "버거 with 감자"
순서를 맞추어서 parameter 값을 전해주는 positional arguments와 keyword
arguments를 혼용하여 사용하는것도 가능하다.
def set(burger, potato): print(f"{burger}, with{potato}") set("버거", potato="감자") #출력 "버거 with 감자"
여기서 중요한것은 keyword arguments 는 순서가 바뀌어도 상관 없지만
positional arguments 부분은 순서를 지켜줘야 한다는 것이다.
함수의 parameter에 default 값을 정의해 줄 수 있다. Default 값이 정의된
parameter는 함수가 호출 될 때 값이 넘겨지지 않아도 괜찮다. 값이 넘겨지지 않은
경우 default 값이 자동으로 넘겨지게 된다.
다만 조심해야 할 점은 default 값이 정의된 parameter가 default 값이 정의 되지
않은 parameter보다 먼저 위치해 있으면 안된다는 점이다. 만일 default value
parameter를 non-default value parameter 앞에 선언하면 syntax error가 발생.
파이썬 함수의 매게 변수에서 인수를 처리하는 순서는 아래와 같다.
다음 코드를 사용해서 함수를 호출
def lan(first="가", second, third): print(f"{first} 과 {second}는 좋아하고 {third}를 싫어한다.") lan("나", "다")
호출 해보니 syntaxError가 발생하였다.
File "main.py", line 1 def lan(first="가", second, third): SyntaxError: non-default argument follows default argument
오류가 발생한 이유는 다음과 같다.
default value parameter가 있으면 실제 parameter의 개수보다 적은
parameter를 입력하게 되어 기본적으로 positional arguments를 따르기 때문에
순차적으로 인수가 할당되어야 한다.
lan 함수의 첫번째 인자가 'first'로 이동해야 하는데, 'first'는 이미 '가'라는
default value가 있다.
default value가 있지만 positional arguments를 따라 'first'와 'second'에 "나"와 "다"가 이동하게 되고 마지막인 'third'가 공석이 된다.
parameter 내부의 인자 중 default argument가 앞 쪽에 위치하게 된다면 인자가
들어갈 곳이 모호해진다.
이러한 일들을 방지하고자 함수에서 non-default value parameter가 default value parameter 보다 앞으로 오도록 설계해야 한다.