[Python] parameter

mandarinduk·2020년 8월 20일
0

함수를 정의 할때 default value parameter를 non-default value parameter 앞에 정의 하면 안되는 이유?

파이썬에서는 파라미터를 받는 순서를 지키지 않을 시 오류가 발생한다.

def example(a, b, c=none, r="w", d=[], *ae, **ab)
  • a, b : positional parameter
  • c=none : optional parameter
  • r="w" : keyword parameter
  • d=[] : list parameter
  • *ae : keyword-only
  • **ab : var-keyword parameter

파라미터를 정의하는 순서 없이 무작위로 생성할 경우 함수는 어떤 파라미터에 어떤 값을 받아야 될지 정할 수 없다.

따라서 오류가 발생하게 된다.

위치 인수(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)
'''
Traceback (most recent call last):
  File "python", line 7, in <module>
TypeError: func_param_with_var_args() missing 1 required keyword-only argument: 'age'
'''

age는 가변인수가 아니지만 *args는 가변인수이다.

가변 인수의 특징은 함수를 호출할 때 전달하는 argument의 개수가 다양하게 변하는 것이다. 또한, 가변 인수 이후에 나열되는 인자는 반드시 키워드 인자로 전달이 되게 된다.

따라서 age에 가야할 인자들이 *args에 들어가게 되어 버리기 때문에 위와 같은 오류가 발생하게 되는 것이다.

튜플형식의 가변 인수의 경우에는 keyword argument형식을 사용하면 된다.

가변 키워드 인수 (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")
'''
Traceback (most recent call last):
  File "python", line 1
    def func_param_with_kwargs(name, age, **kwargs, address=0):
                                                    ^
SyntaxError: invalid syntax
'''

**kwargs는 딕셔너리 형식으로, 뒤에 오게 되는 인자는 키워드 인자로 전달되기 때문에 파라미터 지정 순서에 맞춰 변경 해주면 문제를 해결할 수 있다.

위치 인수와 키워드 가변 키워드 인수 (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")
'''
Traceback (most recent call last):
  File "python", line 1
    def mixed_params(name="아이유", *args, age, **kwargs, address):
                                                       ^
SyntaxError: invalid syntax
'''

이 에러 또한 파라미터 지정 순서로 인한 에러이다.

아래의 사진과 같이 순서를 조정 해주면 해결할 수 있다.

profile
front-end 신입 개발자

0개의 댓글