위치인수, 가변인수, 가변키워드인수에 대해서 알아보기

박준영·2021년 5월 17일

1. 위치 인수(positional arguments)와 가변 인수(variable length arguments)의 위치

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)

코드를 실행하면 다음과 같은 에러가 발생합니다.
TypeError: func_param_with_var_args() missing 1 required keyword-only argument: 'age'

가변인수는 순서가 중요합니다. 일반 일반인수 다음에 가변인수가 들어와야지 에러가 발생하지 않게 됩니다.

def func_param_with_var_args(name, age, *args):
	print("name=", end=""), print(name)
    print("age=", end=""), print(age)
    print("args=", end=""), print(args)
    
func_param_with_var_args("정우성", 20, "01012341234", "seoul" )


## 2. 가변 키워드 인수 (variable length keyword arguments)
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

이것도 마찬가지로 가변인수는 일반 인수 뒤에 있어야 하기 때문에 에러가 발생했기에 가변인수와 일반인수의 위치를 바꿔줍니다.

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")


## 3. 위치 인수와 키워드 가변 키워드 인수 (variable length keyword arguments)
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")

코드를 실행하면 다음과 같은 에러가 발생합니다.

TypeError: mixed_params() got multiple values for argument 'address'

이러한 에러 방지를 위해 가변인수는 일반인수 뒤로 일반인수는 앞으로 이동시킵니다.

def mixed_params(age, name="아이유", address, *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, "정우성", "01012341234", "male" ,mobile="01012341234", address="seoul")

0개의 댓글