우선, 기본적으로 python에서 인자를 넣는 방법을 살펴보자.
def sum(x, y):
return x + y
- Position argument (
args
): 처음부터 번째 수를 맞춰서 딱딱 넣어준다. (Array 성격)- ex)
sum(1, 2)
- ex)
- Keyword argument (
kwargs
): 어떤 이름에 들어갈 것이라고 지정해서 알려준다. (Dict 성격)- ex)
sum(y=2, x=1)
- ex)
args 특징 알아보기
다음과 같이 함수를 정의하고, 그 차이점을 비교해보자.
def print_variable_no_args(x, y):
print(f"x: {x}")
print(f"y: {y}")
def print_variable_with_args(x, y, *args):
print(f"x: {x}")
print(f"y: {y}")
variable_list = ["핫", "둘", "셋"]
이와 같이 출력하면,
print("print_variable_no_args")
print_variable_no_args(variable_list[0], variable_list[1])
print("print_variable_with_args")
print_variable_with_args(variable_list[0], variable_list[1])
다음과 같이 두 함수 모두 결과가 잘 나온다.
print_variable_no_args
x: 핫
y: 둘
print_variable_with_args
x: 핫
y: 둘
하지만 인자를 하나 더 늘리면
print_variable_no_args()는 에러가 나고,
print_variable_with_args()만이 다음과 같은 결과가 나온다.
print_variable_with_args(variable_list[0],
variable_list[1],
variable_list[2])
x: 핫
y: 둘
그 이유가 뭘까?
좀 더 확실하게 알기 위해 *args로 들어가는 인자를 출력하는 함수를 새로 구성했다.
def print_variable_print_args(x, y, *args):
print(f"x: {x}")
print(f"y: {y}")
print(f"args: {args}")
다음과 같이 출력해보면,
print_variable_print_args(variable_list[0],
variable_list[1],
variable_list[2])
print_variable_print_args(1, 2, 3, 4, 5, 6)
이와 같은 결과가 나온다. 즉, 함수에서 x,y인자 외에 추가적으로 들어가면 모두 args에 저장되는 것을 알 수 있다.
x: 핫
y: 둘
args: ('셋',)
x: 1
y: 2
args: (3, 4, 5, 6)
다음과 같이 함수를 정의하면, args에 저장된 특정 인자의 값을 가져올 수 있다.
def print_variable_get_args(x, y, *args):
print(f"x: {x}")
print(f"y: {y}")
print(f"args[0]: {args[0]}")
아까와 같이 출력해보면,
print_variable_get_args(variable_list[0],
variable_list[1],
variable_list[2])
print_variable_get_args(1, 2, 3, 4, 5, 6)
결과는 다음과 같다.
x: 핫
y: 둘
args[0]: 셋
x: 1
y: 2
args[0]: 3
kargs 특징 알아보기
같은 방법으로 다음과 같이 함수를 정의하고, 그 차이점을 비교해보자.
def print_variable_with_kwargs(x, y, **kwargs):
print(f"x: {x}")
print(f"y: {y}")
args와 같이 다음과 같은 결과가 나오는 것을 알 수 있다.
print_variable_with_kwargs(x="마",y="라",z="탕")
x: 마
y: 라
이번에도 **kwargs로 들어가는 인자를 출력하는 함수를 구성해보자.
def print_variable_print_kwargs(x, y, **kwargs):
print(f"x: {x}")
print(f"y: {y}")
print(f"kwargs: {kwargs}")
이와 같이 출력해보면, 결과는 다음과 같다.
print_variable_print_kwargs(x="마",y="라",z="탕", yk="떡볶이")
x: 마
y: 라
kwargs: {'z': '탕', 'yk': '떡볶이'}
이처럼 key와 value값을 활용해서 특정값을 가져올 수 있다.
def print_variable_get_kwargs(x, y, **kwargs):
print(f"x: {x}")
print(f"y: {y}")
for key, value in kwargs.items():
print(f"In kwargs: key {key}, value {value}")
print_variable_get_kwargs(x="마",y="라",z="탕", yk="떡볶이")
x: 마
y: 라
In kwargs: key z, value 탕
In kwargs: key yk, value 떡볶이