무엇이 parameter 이고 무엇이 argument 일까
매개변수는 함수를 정의하는 경우에 필요한 변수(variable) 를 의미한다.
인자는 정의된 함수를 불를 때 매개변수의 값(value) 으로 넘겨주는 실제 값을 의미한다.
def minus(x,y):
return x-y
print(minus(4,2))
2
여기서 x,y 가 parameter 이고
4,2 가 argument 이다.
이렇게 인자들은 매겨변수에 전달되어 함수의 결과를 출력하게 됩니다.
인자들을 매개변수에 전달하는 방법들을 알아보겠습니다.
첫째 . Positioning argument
위에 예시처럼 4와 2를 직접 넣어주는 방식입니다. 이 경우에는 순서가 중요합니다. 2와 4 순서로 넣어주면 전혀 다른값이 출력됩니다. 순서가 중요하기에 이름에도 position 이 쓰여있습니다.
둘째 . Keyword argument
파라미터와 인자를 모두 써주는 방식입니다.
print(minus(x=4,y=2))
print(minus(y=2,x=4))
2
2
셋째 . Keyworded variable length of arguments
파라미터를 써주기 때문에 순서에 구애받지 않습니다. 매개변수(variable) 자체에 인자(value)가 들어간 채로 작동하기 때문입니다.
파이썬에 존재하는 기능입니다. arguments 의 수가 정해지지 않고 유동적으로 변할 수 있는 상황에서 쓰면 유용합니다. 이 arguments 를 선언 하기 위해서는 parameter 이름앞에 두개의 별표 () 로 시작해야 합니다. 주로 kwargs 로 parameter이름을 짓습니다.
과일의 이름과 색을 확인할 수 있는 함수를 생각해보겠습니다.
이런 경우 kwargs 가 유용합니다.
def fruits(**kwargs):
print(f"과일의 이름과 색을 확인해보세요")
for feature in kwargs:
print(f"{feature} : {kwargs[feature]}")
fruits(apple="red")
과일의 이름과 색을 확인해보세요
apple : red
fruits(apple="red", banana="yellow")
과일의 이름과 색을 확인해보세요
apple : red
banana : yellow
과일의 색을 알려주는 함수를 만들었습니다. 지금 떠오르는 과일은 apple 뿐이지만, 향후 banana 가 생각나면 다시 함수를 짜지 않아도, 알려줄 수 있습니다.
함수에 넣어줄 kwargs 는 dictionary 형태로 지정됩니다.
위를 예시로 보면 {apple:"red" , banana="yellow"} 라는 dictionary 로 함수에 전달됩니다.
넷째 . variable length of arguments
간단히 variable arguments 라고 표현하기도 합니다. kwargs 와 비슷하지만 keyword 를 사용하지 않고 순서대로 값을 전달하는 방식입니다. 여기선 별 하나를 사용해 선언합니다. 주로 *args 로 값을 선언합니다.
여러 숫자들을 인자로 받아 더해주는 함수를 생각해보겠습니다.
def numbers(*args):
total = 0
for number in args:
total += number
print(total)
numbers(1,2,3,4)
10
numbers(1,4,9)
14
함수에 넣어줄 args 인자들은 tuple 로 변환되어 함수에 전달됩니다.
하지만 이러한 인자들을 혼용해서 쓰는 경우에는 순서가 중요합니다.
전달할 인자들을 순서대로 쓰지 않으면 오류가 발생합니다.
positioning argument 와 keyword argument 가 섞여 있다고 생각해봅시다.
minus(x="4","2")
이 경우만 봐도 어디까지가 keyword argument 인지 position argument 인지 헷갈립니다.
그렇기에 position argument 는 keyword argument 보다 앞에 나옵니다.
args 를 사용하는 경우에는 어디서 부터 args로 전달할지가 중요하기에 기본값이 제공된 argument(Default argument) 이후에 나오게 됩니다.
**kwargs 는 함수 작성시 들어간 keyword-only argument 보다 늦게 써줍니다.
여기서 keyword-only argument 란 함수 작성시 쓰여진 keyword 이면서, 함수 호출시에 키와 값 형태로 들어가는 인자 입니다.
순서에 관한 사진을 첨부합니다.