(Python)キーワード専用引数と位置引数について
まとめ
関数を定義するときに、キーワード専用引数として指定することができる(Python3.8以降だと、位置専用引数も指定できる)。 要は、「*」より後は必ずキーワード専用引数となり、「/」より前は必ず位置専用引数となる。 極端な例で書くと、
全てをキーワード専用変数として指定する
def hoge(*, a, b): return(a, b)
このとき、関数の引数がキーワード専用となるので、「a="hogehoge", b="hogehoge"」のように関数を利用しないとエラーとなる。つまり、
# これはNG # TypeError: hoge() takes 0 positional arguments but 2 were given hoge("a1", "b1") # これはOK hoge(a="a1", b="b1")
全てを位置専用変数として指定する(Python3.8以降)
def hoge(a, b, /): return(a, b)
このとき、a、bともに位置専用引数として指定されているので、
# これはNG # TypeError: hoge() got some positional-only arguments passed as keyword arguments: 'a, b' hoge(a="a", b="b") # これはOK hoge("a1", "b1")
どのようなときに使うのだろうか?
個人的には「キーワード専用」に指定することは、コードの可読性が高まりそうだなと思う。位置専用にする意図はあまり理解できない。どちらも受け入れればいいのでは?という気がする。強いて言えば、位置専用にしていれば、引数の名前を変更しても利用側に影響がないように強制できる、ということはある(が、実際の現場だと、そうはいってもテストしてしまいそう)。