LoginSignup
89
83

More than 5 years have passed since last update.

Python 関数のキーワード引数

Posted at
f(a, b, option1=10, option2=20)

のように引数をキーワードで指定でしたいという基本的なことについて。オプションは毎回指定するものではなくて、指定しなければデフォルト値が使われるようにしたい。

f(a, b) # option1, option2 は指定しなくてもいい

**kwargs

検索すると **kwargs というものがよくでてくる。

def f(a, b, **kwargs): 
    option1 = kwargs.get('option1', 1)
    option2 = kwargs.get('option2', 2)

kwargs はキーワード名と値の入った辞書で、get メソッドでデフォルトの値を指定している。

しかし、**kwargs は「なんでもあり」なので、うっかりスペルミスすると意図しないデフォルト値が使われる。

f(a, b, opton1=10) # スペルミスにより option1 はデフォルトの1となる

デフォルト引数

そもそも、Python では引数を名前でよべるので、キーワードが決まっているなら **kwargs を使うべきではない。

def f(a, b, option1=1, option2=2): 
    pass

f(a, b, option1=10, option2=20)
f(a, b, opton1=10) # エラー opton1というキーワードはない

しかし、option1は固定引数でもあるので、うっかり引数の数を間違えると option を上書きしてしまう。

f(a, b, c) # 引数の数を間違え、意図しない option1=c

* 引数 (Python3)

Python3 では * をはさむことで以降の変数はキーワードでしか呼べなくなる。

def f(a, b, *, option1=1, option2=2): 
    pass

f(a, b, option1=10, option2=20)
f(a, b, c) # エラー 固定変数は2つ
f(a, b, opton1=10) # エラー 存在しないキーワード

というわけで、Python3 ではこれがおすすめ。

参考

89
83
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
89
83