【Python】誤った引数に値を渡さないためのキーワード引数

著者:杉浦

【Python】誤った引数に値を渡さないためのキーワード引数

 キーワード引数は造語という程ないにしろ正式な語ではありません。可変長引数の一種です。ですがググれば多く出るのでそう間違いでない通称の一つです。

 長大な引数の関数を用いる際、時々引数の順や数え間違いで事故が起こります。何かしらの構造体を使うのが一つの解決策です。構造体中に引数への正しい接続を埋め込み、使用する際には簡単にするAdapterパターンは構造体を用いる接続方法の典型的な解決策の一つです。

// 使いたい関数hogeMember。これを使うためにhogeMember('hoge', 'fuga', 'foo', 'bar',...)と大量の引数を正しい順序で用意することになる。何度も繰り返したり、変更が行われればミスが起きる。
function hogeMember($name, $code, $email, $number, $location, $birthday_year, $birthday_week, $birthday_day, $old)

// $member = new Member();として初期化した後に、$member->name='tarou';などと名前毎にプロパティをセット、$member->callHogeMember()とすることで誤りなくhogeMember()を呼び出せる。
class Member{
  public $name;
  public $code;
  public $email;
  public $number;
  public $location;
  public $birthday_year;
  public $birthday_week;
  public $birthday_day;
  public $old;
  
  public function callHogeMember(){
    hogeMember(
      $this->name,
      $this->code,
      $this->email,
      $this->number,
      $this->location,
      $this->birthday_year,
      $this->birthday_week,
      $this->birthday_day,
      $this->old,
    );
  }
}

 ですが、ただ誤りなく関数を呼ぶためだけのオブジェクトは無駄な気がしてしまいます。特にパラメータが疎な時はなおさらです。キーワード引数はそういった問題を解決します。
 Pythonのキーワード引数は例えば次の様に使います。

HEADERS = {
    "x-api-token": 'apiToken'
}
PARAMS = {
    "mailAddress": randomname(10) + "@example.com",
    "password": "password",
}

response = requests.post(url='https://hogehoge/api/member', headers=HEADERS, params=PARAMS)# 引数順不同
response = requests.post(params=PARAMS, headers=HEADERS, url='https://hogehoge/api/member')# ↑と同じ結果になる

 値に名前をつけて関数を呼ぶことによって、対応したキーの引数に値が渡せます。大体のライブラリは適切にキー名をつけてくれています。キーワード引数を用いることによって、わざわざ準備することなく適切に多様な引数を持つ関数を呼び出せます。

  • この記事いいね! (0)

著者について

杉浦 administrator