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

SungjoonAn·2022년 2월 6일
0

파이썬

목록 보기
4/6
post-thumbnail

위치 인수란 함수를 호출할 때 전달되는 값이 매개변수에 순서대로 전달되는 인수를 의미하며, 가장 자주 사용되는 방식이다

가변 인수란 인수의 개수가 변할 수 있다는 의미이며, 가변인수를 전달받는 함수란 함수를 호출할 때, 인수의 개수를 다양하게 바꿔가며 사용할 수 있는 함수를 의미한다.

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'
해당 에러가 발생하는 이유는 만약 1,2,3,4,5 값을 입력시킨다고 가정하면 1은 name에 할당되지만 나머지 2,3,4,5는 args에 할당되어 age에 아무런 값도 할당되지 않는다. 이러한 에러를 방지하려면 (name, age, args) 처럼 가변인수를 맨 마지막에 입력해서 함수를 만들어야한다.

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
해당 에러가 발생하는 이유는 Default Arguments가 Variable Length Keyword Arguments 뒤에 위치하면 오류가 발생한다. 때문에 **kwargs 와 address=0 의 위치를 바꿔주면 오류가 해결된다.

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

SyntaxError: invalid syntax
해당 에러는 전과 같은 에러가 발생한다. def mixed_params(name="아이유", args, age, **kwargs, address)의 위치가 잘못되었는데 (age, args, name="아이유", address, **kwargs) 순서로 바꾸면 에러가 발생하지 않는다.

0개의 댓글