アルパカログ

カスタマーサポート (CS) とエンジニアリングを掛け算したい CRE (Customer Reliability Engineer) が気になる技術や思ったことなど。

【Python3】キーワード引数の強制とデフォルト値の省略(keyword-only argument)

Python3 でデフォルト値のないキーワード引数を最近知ったので少し調べた内容をまとめておきます。

デフォルト値のないキーワード引数とは次のようなものです。

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-only argument

キーワードのみによって与えられる引数は以下のように、仮引数リストの *args のような可変長位置引数または単なる * の後に定義することができます。

def do_something(*, foo, bar):
    pass

このようにキーワードだけの引数のことを keyword-only argument と言います。

keyword-only argument では必ずしもデフォルト値を持つ必要はありません。

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

PEP 3102 -- Keyword-Only Arguments | Python.org

keyword-only argument を使えば引数が多いとき、仮引数リストをスッキリ書くことができそうです。

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

keyword-only argument を上手く使って Python らしいリーダブルなコードを書いてくださいね。

あわせて読みたい

alpacat.hatenablog.com