Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
70
Help us understand the problem. What is going on with this article?
@junkoda

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 ではこれがおすすめ。

参考

70
Help us understand the problem. What is going on with this article?
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.
Sign Up
If you already have a Qiita account Login
70
Help us understand the problem. What is going on with this article?