[Python] Positional Arguments, Variable Length Arguments, Variable Length, Keyword Arguments 위치 오류 정리

난나다·2022년 6월 23일
0

Python 정리

목록 보기
3/10

시작하며

positional arguments와 variable length arguments, variable length keyword arguments를 사용하고 오류가 발생한다면 그 이유를 알아보자.

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'

원인

함수를 정의하는 과정에서는 문제가 없으나 인수를 받을 때 *args 가 non-parameter 보다 앞서서 인수를 모두 받게 되므로 age parameter가 값을 받지 못해 TypeError 가 발생합니다.

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

원인

간단하게 얘기하자면 parameter를 순서대로 작성하지 않아서 SyntaxError 가 발생한 경우입니다. **kwargs 가장 마지막에 작성되어야 할 함수 parameter 입니다. 이전에 *args 의 경우 순서가 바뀌어도 default 값을 미리 지정하면 문제가 없었던 반면 **kwargs 는 뒤에 parameter 가 오는 순간 SyntaxError 가 발생하게 됩니다.

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

오류

SyntaxError: invalid syntax

원인

위 사항과 동일한 경우라고 보시면 되겠습니다.

마치며

함수의 parameter 순서를 도식화한 자료를 보며 마치겠습니다.


참고

https://livetodaykono.tistory.com/19
https://brunch.co.kr/@princox/180

0개의 댓글