Help us understand the problem. What is going on with this article?

Python 関数のキーワード引数

More than 3 years have passed since last update.
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 ではこれがおすすめ。

参考

http://stackoverflow.com/questions/1419046/python-normal-arguments-vs-keyword-arguments

junkoda
イタリアで宇宙大規模構造のシミュレーションをしたりしてます。
http://github.com/junkoda/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした