可変パラメータと位置パラメータ



🐚 Keyword Arguments


以前に学習した関数は、定義された関数のparameterの順序でparameterを超えなければならない.しかし、keyword argumentsを使用すると、コードをより簡単に、より明確に読むことができます.
def name_and_age(my_name, my_age):
	print(f"{my_name} is {my_age} years old")
    
name_and_age(my_name="Jang", my_age=25)
#	"Jang is 25 years old"

Mixing positional arguments


順番に置いてあるのはpositional argumentsです.関数を呼び出すときは、positoinal argumentskeyword argumentsを混合して使用できます.
def name_and_age(my_name, my_age):
	print(f"{my_name} is {my_age} years old")
    
name_and_age("Jang", my_age=25)
#	"Jang is 25 years old"
しかし、Positional argumentsは順序を守らなければならない.keyword argumentsの順序が異なっても構いませんが、呼び出しが次のようになっている場合は、
name_and_age(my_age=25,"Jang")
SyntaxErrorが発生します.

Parameter Default Value


また、Parameterおよびdefaultの値を事前に定義することもできます.次のコードに示すように、呼び出し時にparameterの値を定義することなく自動的に入力されます.
def name_and_age(my_name, my_age=25):
	print(f"{my_name} is {my_age} years old")
    
name_and_age("Jang")
#	"Jang is 25 years old"

🙋🏼 予想される問題


1
Q.定義関数を学んだ場合、non-default valueparameterより前にdefault valueparameterを定義することはできません.どうしていけないと思うの?
A.default value parameterは、関数を呼び出す際にdefaultparameterを呼び出す必要があるため、効率が低下している.
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("정우성", "01012341234", "seoul", 20)
上記のコードは*argsからnameの後のすべてのparameterにインポートされ、ageに入るparameterは残りません.誤りを正すために、
def func_param_with_var_args(name, *args):
    print("name=",end=""), print(name)
    print("args=",end=""), print(args[0:2])
    print("age=",end=""), print(args[2])

func_param_with_var_args("정우성", "01012341234", "seoul", 20)
上のコードに従って書けばいいです.
3
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をすべて格納し、key argumentsaddressに入った.次の図のように、コードを変更するとエラーが解決する可能性があります.
def func_param_with_kwargs(name, age, **kwargs,):
    print("name=",end=""), print(name)
    print("age=",end=""), print(age)
    print("kwargs=",end=""), print(kwargs)
    print("address=",end=""), print(list(kwargs.items())[1][1])

func_param_with_kwargs("정우성", "20", mobile="01012341234", address="seoul")
4
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")
上記のコードは、**kwargsが最初に呼び出されたときに最初のageに入り、関数で定義された順序が3番目に入り、一番前に置かれます.もう1つの方法は、parameterの順序を後方に送信し、20を削除し、age``parameterから取り出すことである.
また,*args**kwargsも以前の問題と同様に誤りがあったため,同様に解決した.

def mixed_params(age, name="아이유",*args,**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(list(kwargs.items())[1][1])

mixed_params(20, "정우성", "01012341234", "male" ,mobile="01012341234", address="seoul")