kwargs 영어로 하면 keyword arguments
kwagrs는 다른 이름으로 사용해도 상관없다.
*agrs와 다른 점이라면, kwargs는 키워드로 이루어진 복수의 인자를 받는다.
(정확히는, 정해지지 않은 수의 키워드로 이루어진 인자)
다음과 같은 코드를 실행해보자.
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")
invalid syntax 에러가 발생하며 실행 자체가 되지 않는것을 확인할 수 있다.
*args 코드 오류에서 처럼 **kwargs 역시 맨 뒤에 위치하면 되는것이 아닐까 생각해보고 코드를 수정한 후 실행해보았다.
def func_param_with_kwargs(name, age, address=0, **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") #결과 name=정우성 age=20 kwargs={'mobile': '01012341234'} address=seoul
위와 같이 출력이 되는것을 확인할 수 있다.
다음과 같은 코드를 실행해보자
def mixed_params(name="아이유", *args, age, **kwargs, address): print("name=",end=""), print(name) print("args=",end=""), print(args) print("age=",end=""), print(age) print("kwargs=",end=""), print(kwargs) print("address=",end=""), print(address) mixed_params(20, "정우성", "01012341234", "male" ,mobile="01012341234", address="seoul")
실행이 되지않고 invaild syntax 에러가 발생한다.
함수 정의 순서를 생각하며 코드를 수정하였다.
일반 인자 -> default 일반 인자 -> 가변 인자 -> Keyword-Only 인자 -> 키워드 가변 인자
다음과 같이 코드를 수정하여 실행하였는데
def mixed_params(age,address, name="아이유", *args, **kwargs): print("name=",end=""), print(name) print("args=",end=""), print(args) print("age=",end=""), print(age) print("kwargs=",end=""), print(kwargs) print("address=",end=""), print(address) mixed_params(20,address="seoul", "정우성", "01012341234", "male" ,mobile="01012341234")
positional argument follows keyword argument라는 에러가 발생하였다.
처음보는 에러라서 당황했지만 다시한번 함수 정의 순서를 살펴보니
Keyword-Only 인자라는 것이 address에 해당하는 것을 알게되었고
다음과 같이 코드를 수정하여 실행해보니
def mixed_params(age, name="아이유", *args, address,**kwargs): print("name=",end=""), print(name) print("args=",end=""), print(args) print("age=",end=""), print(age) print("kwargs=",end=""), print(kwargs) print("address=",end=""), print(address) mixed_params(20, "정우성", "01012341234", "male" ,address="seoul",mobile="01012341234")
출력 결과는 다음과 같다.
name=정우성 args=('01012341234', 'male') age=20 kwargs={'mobile': '01012341234'} address=seoul