アルパカログ

Webエンジニア兼マネージャーがプログラミングやマネジメント、読んだ本のまとめを中心に書いてます。

Python デフォルト値のないキーワード引数(Keyword-Only Arguments)

f:id:otoyo0122:20200803131725p:plain:w300

Python3ではデフォルト値のないキーワード引数を設定することができます。

デフォルト値のないキーワード引数は「Keyword-Only Arguments(キーワード専用引数)」を使って実現できます。

このエントリではKeyword-Only Argumentsについて説明します。

デフォルト値のないキーワード引数

デフォルト値のないキーワード引数は次のように書きます。

def do_something(hoge, fuga, *, foo, bar):
    pass

初めて見た人は*の解釈に困るかもしれません。

この関数は次のようにして呼び出します。

do_something("hoge", "fuga", foo="foo", bar="bar")

*を境界に引数の与え方が異なっています。

ここでPythonの引数について一度おさらいしておきましょう。

Pythonにおける実引数と仮引数

引数には「実引数(argument)」と「仮引数(parameter)」があります。

実引数は関数の呼び出し時に渡す実際の値で、仮引数は関数側で実引数を入れておく仮の容れ物ですね。

  • 実引数: 関数の呼び出し時に実際に与える値
  • 仮引数: 関数側で実引数を入れる仮の変数

Pythonの実引数は「キーワード引数(keyword argument)」と「位置引数(positional argument)」の2種類だけです。

一方、仮引数は位置引数のみ、キーワード引数のみ(キーワード専用引数)、位置引数とキーワード引数、可変長の位置引数、可変長のキーワード引数の5種類あります。

  • 実引数の種類
    • キーワード引数(keyword argument)
    • 位置引数(positional argument)
  • 仮引数の種類
    • 位置引数のみ
    • キーワード引数のみ(キーワード専用引数)
    • 位置引数とキーワード引数
    • 可変長の位置引数
    • 可変長のキーワード引数

参考

Keyword-Only Argumentsとは?

キーワード専用引数は、可変長位置引数*argsまたは単なる*の後に定義することができます。

よって、下記のfoobarはキーワード専用引数(Keyword-Only Arguments)になります。

def do_something(*, foo, bar):
    pass

キーワード専用引数は必ずしもデフォルト値を持つ必要はありません。

Keyword-only arguments are not required to have a default value.

もちろん、必要であればデフォルト値を定義することもできます。

以上です。参考になった方は、ぜひ「はてブ」やSNSでシェアしていただけると嬉しいです。