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