[Python] Function parameters



Parameter Default Value
関数のパラメータにdefault値を定義する場合、関数を呼び出すときに値を渡す必要はありません.値を渡さない場合、default値が自動的に渡されます.
この場合、default valueparameterを宣言する際の位置が重要です.
def love_you(my_name = "kim", your_name): 
    print(f"{my_name} loves {your_name}") 
   
> Traceback (most recent call last):   
    File "python", line 1 
SyntaxError: non-default argument follows default argument
non-default valueparameterの前にdefault valueparameterを宣言すると構文エラーが発生します.
Pythonからパラメータを受信する順番を決めましたが、守らないとエラーが発生します
def example(a, b, c=None, r='w', d=[], *ae, **ae)

-a, b: positional parameter
-c = none : optional parameter
-r = 'w' : keyword parameter
-d=[] : list parameter
-*ae : keyword-only
-**acb : var-keyword parameter
エラーの原因は、生成された関数がパラメータの順序を定義していない場合、関数がどのパラメータに対してどの値を受信すべきかを決定できないためです.
! Python 3以降から「*」を使用し、エラーは発生しません.
def fun1(a='kim', b='True', *, x, y):
   pass
fun1(x=2, y=2)
位置パラメータ(位置パラメータ)
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("kim", "01012341234", "seoul", 40)
この場合、次のエラーが発生します.
TypeError: func_param_with_var_args() missing 1 required keyword-only argument: 'age'
このときargsは「kim」からすべての値を取得し始め,ageに対応するパラメータは得られなかった.
この場合、*argsを末尾に送信すると、解決する
def func_param_with_var_args(name, age, *args):
    print("name=",end=""), print(name)
    print("age=",end=""), print(age)
    print("args=",end=""), print(args)
    
func_param_with_var_args("kim", 40, "01012341234", "seoul")
variablelengthキーワード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("kim", "20", mobile="01012341234", address="seoul")
SyntaxError: invalid syntax
これはエラーです.varable length keyword argumentsは他のargumentsの後ろにあるべきではないので、最後に置くと解決します.
def func_param_with_kwargs(name, age, address=0, **kwargs):
    print("name=",end=""), print(name)
    print("age=",end=""), print(age)
    print("address=",end=""), print(address)
    print("kwargs=",end=""), print(kwargs)

func_param_with_kwargs("kim", "20", address="seoul", mobile="01012341234")
位置パラメータ(位置パラメータ)&variablelengthキーワードパラメータ(可変キーワードパラメータ)
def mixed_params(name="lilo", *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(40, "kim", "01012341234", "female" ,mobile="01012341234", address="seoul")
上記の場合、位置パラメータはdefault valueの後になるので、位置パラメータを前に減算し、位置パラメータのaddressをキー値として受信するので、変数パラメータとキーワード変数パラメータの間に挿入してエラーを解決できます.
最初はキー値で受信するため、フォーマットをaddress=0に変更し、操作を変更することなく別の位置に移動します.

def mixed_params(age, name="아이유", *args, address, **kwargs):
    print("age=",end=""), print(age)
    print("name=",end=""), print(name)
    print("address=",end=""), print(address)
    print("args=",end=""), print(args)
    print("kwargs=",end=""), print(kwargs)


mixed_params(20,  "lilo", "01012341234", "female" , address="seoul", mobile="01012341234")