Pythonで自分で関数を定義する方法 その2 〜オプション引数と必須引数〜

スポンサーリンク

def文

前に自分で関数を定義する方法としてdef文を紹介しました。

Pythonで自分で関数を定義する方法 その1 〜def文の基本と注意点〜
自分の関数を定義する必要性今回はpythonのdef関数に関して、解説をしていきます。プログラミングをしていくと、何度も何度も同じ処理をするプログラムを書くことがでてくることでしょう。何度も書いていくと、どうしても...

今回はdef文をもっと使っていくためにオプション引数に関して解説していきます。

またdef文における必須引数、オプション引数が混ざっている時の書き方や使い方も同時に解説していきます。

スポンサーリンク

オプション引数の基本

引数の中には、デフォルトで値を入れておいて、デフォルト値と異なる時だけ引数を入れたいなんて場合もあることでしょう。

そんなときはオプション引数を使います。

オプション引数は def 関数名(引数名 = 値)というように用います。

def test1(x=10):
    print(x)
    
test1()

実行結果
10

この場合、testという関数に対してデフォルトでx=10が設定されています。

そのため、test()というように引数xに値を入れなくても 10 が表示されます。

もちろん引数に値を入れるとその値が引数に挿入されます。

def test1(x=10):
    print(x)
    
test1(5)
スポンサーリンク

オプション引数と必須引数

オプション引数に対して、最初に説明した値を入れなければいけない引数のことを必須引数と呼びます。

この必須引数とオプション引数は混ぜて使うこともできます。

def calc1(x, y=5):
    print(x)
    print(y)
    print(x + y)
    
calc1(1)

実行結果
1
5
6

この場合、xが必須引数、yがオプション引数です。

def文を書く際、この必須引数とオプション引数を書く順番に注意する必要があります。

必ず必須引数を先に書き、オプション引数を後に書きます。

先ほどのcalc1という関数の引数をオプション引数、必須引数の順にしてみます。

def calc1(y=5, x):
    print(x)
    print(y)
    print(x + y)
    
calc1(1)

実行結果
  File "<ipython-input-XX-XXXXXXXXXXXX>", line 1
    def calc1(y=5, x):
             ^
SyntaxError: non-default argument follows default argument

ちなみにこれは三つ以上の引数になった場合も同様です。

・良い例

def calc2(x, y, z=5):
    print(x)
    print(y)
    print(z)
    
calc2(1, 3)

実行結果
1
3
5

・悪い例

def calc3(z=5, x, y):
    print(x)
    print(y)
    print(z)
    
calc3(1, 3)

実行結果
  File "<ipython-input-XX-XXXXXXXXXXXX>", line 1
    def calc3(z=5, x, y):
             ^
SyntaxError: non-default argument follows default argument
def calc2(x, z=5, y):
    print(x)
    print(y)
    print(z)
    
calc2(1, 3)

実行結果
  File "<ipython-input-XX-XXXXXXXXXXXX>", line 1
    def calc2(x, z=5, y):
             ^
SyntaxError: non-default argument follows default argument
スポンサーリンク

引数の入力の仕方

これまでの例では関数を呼び出す際、引数は引数を設定した順番に入力していました。

def calc2(x, y, z=5):
    print(x)
    print(y)
    print(z)
    
calc2(1, 3, 10)

実行結果
1
3
10

それ以外にも引数の名前を使って、入力することもできます。

def calc2(x, y, z=5):
    print(x)
    print(y)
    print(z)
    
calc2(x=1, y=3, z=10)

実行結果
1
3
10

このように引数の名前を使って入力する場合、順番は入れ替わっても構いません。

def calc2(x, y, z=5):
    print(x)
    print(y)
    print(z)
    
calc2(z=10, x=1, y=3)

実行結果
1
3
10

流石に毎回、全ての引数に対して名前を書いていくの面倒なので、個人的には必須引数は名前無しで前から順番に書いていって、オプション引数だけ名前を使って入力したりしています。

def calc3(a, b, c=2, d=4):
    print(a)
    print(b)
    print(c)
    print(d)
    
calc3(1, 3, c=5, d=10)

実行結果
1
3
5
10

これであればオプション引数のうち、入力しないものがあっても飛ばして次のオプション引数を入力することができます。

def calc3(a, b, c=2, d=4):
    print(a)
    print(b)
    print(c)
    print(d)
    
calc3(1, 3, d=10)

実行結果
1
3
2
10

ということで今回はdef文でのオプション引数、必須引数の使い方を解説しました。

最初にも言いましたが、これを覚えているとdef文が使える場面が増えるので、覚えておいて損はないと思います。

実際、私も最近覚えてここからdef文を多用するようになりました。

是非是非試してみてください。

ということで今回はこんな感じで。

コメント

タイトルとURLをコピーしました