가변 키워드 인수

최창현·2021년 12월 29일
0

가변 키워드 인수 (variable length keyword arguments)

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
profile
chch_oi

0개의 댓글