TIL 18. パラメータ
まず,関数を定義するときの変数名をパラメータ(parameter),関数を呼び出すときに渡される値をパラメータ(parament)と呼ぶ.
1.関数定義時のdefault valueparameterとnon-default valueparameterの位置
関数を定義する場合は、各パラメータにデフォルト値を指定することもできます.パラメータの値が分からないか、パラメータの値がない場合は、関数を返すときに既存のdefault値を露出できます.
(注)関数を呼び出す場合は、定義した関数にパラメータと同じパラメータを入力する必要があります.default値を指定した場合は、その値以外のパラメータと同じパラメータを入力するだけです.
default値の使用時に注意すべき事項
-.関数を定義する場合、non-deffault値パラメータの前にdefault値パラメータを宣言することはできません.
→default値パラメータを先に宣言した場合、システムエラーにより関数が宣言されなくなります.
SyntaxError: non-default argument follows default argument
default値パラメータが前に宣言されている場合、後で関数を呼び出すときに入力する特定のパラメータがどのパラメータに置き換えられるかは不明です.
-.default値パラメータ自体が入力値であるか、値を入力しないかのいずれかであるため、必要な値を正確に返すのは難しい
パラメータの位置順序:non-defultvalueparameter、defaultvalueparameter
2.位置パラメータ(position arguments)と可変長パラメータ(variablelength arguments)の位置によりエラーが発生しました
args
-論争の意味
-はい.前に*を追加します.
-.未キーワード形式の未確定数量の阿膠を受け入れる
→変数個数に関係なく受け入れる
kwargs
-.キーワードargumentsの意味
-はい.前に**を追加します.
-.キーワード=関数を特定の値で呼び出す
-関数に.dicksherner形式{'キーワード':'特定値'}で渡す
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'→Pythonはどこからどこまで*argsの変数に含めるべきか分からないので、最後に置かなければなりません.(*argsは後ろのすべての値を持って行きます)
下図に示すように、*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("정우성", "01012341234", "seoul", 20)
鄭雨盛args=('seoul', 20)
age=01012341234
3.可変キーワード引数(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("정우성", "20", mobile="01012341234", address="seoul")
def func_param_with_kwargs(name, age, *kwargs, address=0):^
SyntaxError: invalid syntax
→argsと同じ残りのすべての値を取得し、addressの値を認識できなくなり、エラーが発生する
下図に示すように、*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")
鄭雨盛age=20
kwargs={'mobile': '01012341234'}
address=seoul
4.位置引数とキーワード可変キーワード引数(variablelength keywordarguments)の位置を参考資料で調べ、どのようなエラーが発生したかを確認する
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")
def mixed params(name=“iu”,*args,age,**kwargs,address):^
SyntaxError: invalid syntax
→前に2つのエラーがあります.
1)non-default-valueパラメータがdefault-valueパラメータより前にある
2)**kwargsの位置が最後になります
合成を次のように並べ替えると、正常に動作します.
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")
鄭雨盛args=('01012341234', 'male')
age=20
kwargs={'mobile': '01012341234'}
address=seoul
参考資料
https://getkt.com/blog/python-keyword-only-arguments/
https://velog.io/@devmin/
https://livetodaykono.tistory.com/19
Reference
この問題について(TIL 18. パラメータ), 我々は、より多くの情報をここで見つけました https://velog.io/@fall031/파이썬テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol