4 - Function Parameters



Q1. 関数を定義するときにdefault valueparameterをnon-deffault valueparameterに定義する前に、なぜエラーが発生したのですか?

def love_you(my_name = "Suhan", 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

理由:


上の関数が
love_you("coding")
このように呼び出すと、pythonは「coding」がmy nameパラメータなのかyour nameパラメータなのか分からないため、エラーが発生します.

Q2. 位置パラメータと可変パラメータ?


可変パラメータ:*args形式で表示され、任意の数のパラメータがあります.可変パラメータは、通常の数の後に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)
以上のコードがエラーの原因となります.
「鄭雨盛」はnameの位置パラメータとして指定されたが、その後のパラメータは*argsパラメータに渡された.

*変更

def func_param_with_var_args(name, age, *args):
    print("name=",end=""), print(name)
    print("args=",end=""), print(args)
    print("age=",end=""), print(age)




func_param_with_var_args("정우성", 20, "01012341234", "seoul")

Q3. 可変キーワードパラメータ(variablelengthキーワードarguments)


可変キーワードパラメータは*argsに類似したパラメータであり、キーワード**があることを区別します.kwargsの形で表現します.
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")
以上のコードがエラーの原因となります.
可変キーワードパラメータ**kwargsでmobile、address値を渡し、addressパラメータの要素を消去します.

*変更

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

Q4. 位置パラメータとキーワード可変キーワードパラメータ(variablelengthキーワードパラメータ)

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")
以上のコードがエラーの原因となります.
まず、name、ageの順序が間違っているため、nameの後に残りの要素が*argsに渡されます.

*変更

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