def plus(x,y): #x,y가 매개변수
return x+y
a = plus(10, 20) # 10, 20이 인수
print("a ==>", a)
Positional Arguments는 가장 기본적인 함수의 파라미터 형태로, 말 그대로 위치에 따라 인자가 함수 매개변수에 대입되고 함수 호출시 매개변수 순서대로 입력/호출된다. 따라서 매개변수의 순서를 기억해야만 오류 없이 원하는 결과값을 얻을 수 있다.
입력 순서와는 관계없이 (함수선언시 입력한 파라미터 순서대로가 아닌) parameter 이름으로 맞추어서 값을 전달하는 방식이다. 때문에 순서를 기억할 필요가 없다.
순서를 맞추어서 parameter 값을 전해주는 positional arguments와 keyword arguments를 혼용하여 사용하는것도 가능하다. 다만, 여기서 중요한것은
함수의 parameter에 default 값을 정의해 줄 수 도 있다. Default 값이 정의된 paramter는 함수가 호출될때 값이 넘겨지지 않아도 괜찮다. 값이 넘겨지지 않은 경우 default 값이 자동으로 넘겨지게 된다.
이번 과제는 programming 과제가 아니라 개념을 설명하는 과제 입니다. 함수를 정의 할때 default value parameter를 non-default value parameter 앞에 정의 하면 안된다고 배웠습니다. 왜 안돼야만 하는지 생각해보시고 블로깅 하여 채널에 공유해 주세요.
파이썬 함수에서 Arguments들의 순서는 미리 정해져 있는데, 이 규칙에 따라 순서대로 Arguments가 나와야 합니다.
[함수 Arguments 우선순위]
1. positional argument
2. default argument
3. positional arguments들의 집합
4. keyword arguments
5. keyword default arguments
6. keyword arguments의 집합
아래 2가지 코드 비교를 통해서 설명하도록 하겠습니다.
1) default value parameter가 non-default value 보다 뒤에 선언된 경우
def multiply(a,b,c=10): #1번 예시
return a * b * c
print(multiply(2,3))
1번의 경우, 파이썬 함수 규칙에 따라 position argument가 먼저 나왔고, multiply(2,3) 함수 호출 시, 인자 a에는 2과 대입되고, b에는 3이 대입되고, 마지막으로 c는 함수 호출 시에는 없지만 함수에 default로 설정되어 있기에 60이란 결과값이 제대로 출력이 됩니다.
def multiply(a=10,b,c): #2번 예시
return a * b * c
print(multiply(2,3))
하지만 2번 예시처럼 default parameter가 non-default parameter보다 앞에서 선언을 하게 되면 아래와 같은 에러 메시지가 뜹니다.
multiply 함수 호출 시, position arguement 로직에 따라 인자로 받은 값 2을 a에 대입을 하려고 하는데, a에는 이미 10이란 default value가 있기 때문에 충돌이 발생하게 됩니다. 따라서 Syntax 에러에서 non-default argument가 default argument의 뒤에 나왔다라는 에러 메시지가 뜨게 되는 것입니다.