TIL 11 | Python default value parameter, non-default value parameter

24031 단어 pythonpython

python에서 default value parameter는 non-default value parameter 앞에 쓸 수 없다.

이유가 무엇일까 ❔❓❕

우선, non-default value parameter는 값이 정해져있지 않는 파라미터이다.

# non-default value parameter
def adorable(dog, name):
    print(f"{dog} {name} so cute")

반대로 default value parameter는 값이 정해져 있는 파라미터이다.

# default value parameter
def adorable(dog="poodle",name="raon"):
    print(f"{dog} {name} so cute")

# non-default value parameter랑 섞어서 사용할 수 있다.
def adorable(dog,name="raon"):
    print(f"{dog} {name} so cute")
    
adorable("poodle")
# 호출의 결과값은 "poodle raon so cute" 로, default value parameter가 할당된 경우엔 따로 argument값을 주지 않아도 기본값 "raon"이 출력된다.

섞어서 사용하는 경우에 순서가 바뀔 때 에러가 발생한다.

def adorable(name="raon",dog):
    print(f"{dog} {name} so cute")
    
SyntaxError: non-default argument follows default argument

발생하는 이유는 불확실성 때문이다. 간단하게 non-default 파라미터는 필수 입력값인데에 반해 default 파라미터는 필수가 아니기 때문에 이를 섞어서 사용하면 함수를 호출할 때 컴퓨터는 어디에 어느 argument를 매칭해야 하는지 알지 못해 순서를 맞춰서 non-default value parameter를 앞에 두고 default value parameter를 뒤에 둬야 한다.

여러 가지 에러와 에러를 수정하는 과정!

1.

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'

variable-length parameter 인 *args 뒤에는 keyword-only parameter 같은 타입이 올 수 있기 때문이다. age 부분을 다음과 같이 변경해주면 된다.

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", age=20)

출력값은 아래와 같다.

name=정우성
args=('01012341234', 'seoul')
age={'age': 20}

2.

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

실행하면, 아래와 같은 에러가 발생한다.

  File "main.py", line 1
    def func_param_with_kwargs(name, age, **kwargs, address=0):
                                                    ^
SyntaxError: invalid syntax

keyword-only parameter인 **kwargs 뒤에 default value parameter가 위치해 invalid syntax 에러가 발생했다. address=0을 앞으로 위치시켜주어 해결할 수 있다.

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

3.

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

실행하면 아래와 같은 에러가 발생한다.

  File "main.py", line 1
    def mixed_params(name="아이유", *args, age, **kwargs, address):
                                                       ^
SyntaxError: invalid syntax

파라미터의 순서를 정리해주면 에러를 해결할 수 있다.

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" ,mobile="01012341234", address="seoul")

출력값은 아래와 같다.

name=정우성
args=('01012341234', 'male')
age=20
kwargs={'mobile': '01012341234'}
address=seoul

참고
https://getkt.com/blog/python-keyword-only-arguments/

좋은 웹페이지 즐겨찾기