파이썬의 함수에 parameter를 전달하는 방법인 variable length positional argument와 variable length keyword argument에 대해 알아보자
- Variable Length라는 말 그대로 변수의 개수가 정해지지 않은 parameter들을 함수에 입력하는 순서에 맞게 전달할 때 사용된다.
- 함수를 정의할때, parameter앞에 *(asterisk)를 붙여 사용한다.
- tuple형태로 함수에 전달된다.
def function(*args):
def print_all(*args):
print(arg)
print_all("my", "name", "is", "dongmyeong")
("my", "name", "is", "dongmyeong")
- Variable Length라는 말 그대로 변수의 개수가 정해지지 않은것에 더해, keyword로 변수를 넘겨야 한다.
- 함수를 정의할때, parameter앞에 *(asterisk)를 2개 붙여 사용한다.
- dict 형태로 함수에 전달된다.
def function(**kwargs):
def print_all(*kwargs):
print(arg)
print_all(name="dongmyeong", position="back-end", age=29)
{name: "dongmyeong", position: "back-end", age: 29}
*args
argument는 keyword없이 입력된 parameter를 모두 받기 때문에, 그 뒤에 정의된 parameter를*args
와 구분하기 위해서는 keyword를 통해 parameter를 전달해야한다.*args
argument와 구분되며, keyword를 통해 parameter가 전달되기 때문에,*args
와*kwargs
사이에 위치한다.- 이 때, default값이 있으면 Keyword-Only Argument, 없으면 Non-default Keyword-only Argument라 한다.
def func_param_with_var_args(name, *args, age):
print("name=",end=""), print(name)
print("args=",end=""), print(args)
print("age=",end=""), print(age)
func_param_with_var_args("정우성", "01012341234", "seoul", 20)
여기서는 age가 Non-default Keyword-only Argument이다.
TypeError: func_param_with_var_args() missing 1 required keyword-only argument: 'age
func_param_with_var_args("정우성", "01012341234", "seoul", age=20)
keyword를 통해 parameter 20을 전달했다.
def func_param_with_kwargs(name, age, **kwargs, address=0):
print("name=",end=""), print(name)
print("age=",end=""), print(age)
print("kwargs=",end=""), print(kwargs)
print("address=",end=""), print(address)
func_param_with_kwargs("정우성", "20", mobile="01012341234", address="seoul")
SyntaxError: invalid syntax
**kwargs
가 keyword로 전달되는 parameter를 모두 받기 때문에, keyword-only argument를 **kwargs
뒤에 위치시킬 수 없어 SyntexError가 발생하였다.
def func_param_with_kwargs(name, age, **kwargs):
print("name=",end=""), print(name)
print("age=",end=""), print(age)
print("kwargs=",end=""), print(kwargs)
print("address=",end=""), print(address)
func_param_with_kwargs("정우성", "20", mobile="01012341234", address="seoul")
함수에서 address를 삭제하고 **kwargs
argument를 통해 mobile과 address를 dict형태로 parameter를 받도록 수정하였다.
def mixed_params(name="아이유", *args, age, **kwargs):
print("name=",end=""), print(name)
print("args=",end=""), print(args)
print("age=",end=""), print(age)
print("kwargs=",end=""), print(kwargs)
mixed_params(20, "정우성", "01012341234", "male" ,mobile="01012341234", address="seoul")
TypeError: mixed_params() missing 1 required keyword-only argument: 'age'
age는 Non-default Keyword-only Argument이기 때문에, age=20
형태로 parameter를 함수에 넘겨줘야 한다.
또한, *args로 넘겨주려는 parameter 뒤에 위치해야 한다.
mixed_params("정우성", "01012341234", "male" , age=20, mobile="01012341234", address="seoul")
앞에 있던 20을 age라는 keyword와 함께, *args
와 **kwargs
사이에 배치하여 함수에 전달하도록 code를 수정하였다.