Python Function Parameter


1.default valueparameter non-default valueparameterの前に定義できない理由の個人的な意見。

  def registMember(sex='남자', name, age):
      print(sex)
      print(name)
      print(age)
      ...

  registMember('James', 32)  
上記のコード基準では、default parameterが先に宣言したときにpositionで区切られた関数では、「James」が性parameterのパラメータなのかnameのパラメータなのか区別できません.このような事態を防ぐために、パイソンはそれを誤った対象として処理したと推測されている.

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)
上記のコードを実行すると、「TypeError:func param with var args()missing 1 requiredキーワード-onlyパラメータ:"age"というエラーが発生します.これはargsがtuple形式のパラメータとして複数の値を受信するために使用され、関数呼び出し部は2番目(01012341234)から最後の(20)をargsと認識し、最後のageが見つからない問題である.この問題を解決するには、次のように宣言と呼び出しを位置パラメータ処理に変更する必要があります.
  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")

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")
上記のコードを実行すると、addressパラメータのSyntaxError:構文が無効になります.
**kwargsは、キーと値からなるデータを受信するパラメータです.
kwagsから順次入力されるキーと値構造のデータはすべてkwagsに入力されるため、後述する単一のパラメータは使用できません.この問題を解決するには、以下のようにパラメータの順序を変更する必要があります.
では、呼び出し中にキーワードパラメータフォーマットを採用したaddressはaddressパラメータとして認識される.
    def func_param_with_kwargs(name, age, address=0, **kwargs):

4.位置パラメータとキーワード可変キーワードパラメータ(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")
上のコードには以下の問題があります.
  • defaultパラメータ定義が一番前(問題1)
  • ageは*argsの次のパラメータとして定義する(問題2)
  • addressは**kwargsの次の順序のパラメータとして定義され、呼び出し時にキーワードパラメータとして使用されます.
    処理後キー値データをkwargsと衝突(問題3)
  • 上記の問題を解決するためにパラメータ順序を変更する
  • .
        def mixed_params(age, address, name="아이유", *args,  **kwargs):
            ....
    
        mixed_params(20, "seoul", "정우성", "01012341234", "male", mobile="01012341234")