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


pythonでは、non-default valueparameterの前にdefault valueparameterを書くことはできません。


理由は何ですか
まず、non-default valueparameterは、与えられた値のないパラメータです.
# non-default value parameter
def adorable(dog, name):
    print(f"{dog} {name} so cute")
逆にdefault valueparameterは、与えられた値のパラメータです.
# 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パラメータは必要ではありません.これを混合して使用すると、関数を呼び出すとき、コンピュータはどのパラメータに一致するか分かりません.そのため、non-default valueparameterを順番に前面に置き、default valueparameterを後ろに置く必要があります.

各種の誤りと誤りの過程を修正します!


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
default value parameterはkeyword-only parameter**kwargsの後ろにあり、無効な構文エラーが発生しました.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/