Atom's tech blog

Pythonを勉強しよう! 関数パラメータに初期値を設定する

f:id:iAtom:20201109203052j:plain

Python初心者の備忘録.....

今回は起動先の関数側で、予め初期値を設定しておく方法です。

Pythonには関数パラメータに初期値を持たせておくことができます。これを「デフォルト引数」と呼び、 関数起動時にパラメータの指定を省略しても、そのパラメーターにはあらかじめ与えられる引数をいいます。

パラメータ値の幅がある場合、普通に使うときはX X値。カスタマイズして使用したいときは、Y Y値に変えて動作させたい。

そのようなケースにおいてとても便利な仕組みです。

ただし、インタフェースを確認、理解した上で設計・コーディングしないと、あとでインタフェースミスに繋がる可能性があるため要注意です。

デフォルト引数ができる記述

パラメータが一つの場合
def   "関数名"" パラメータ名 "  =  "  デフォルト値  ") :
        "関数で実行する処理"

・サンプルコード

def defaultParaTest( para1 = "defalutPara"):
    print( para1 )

# defaultパラメータ設定を使用した場合
defaultParaTest()
# defaultパラメータ値を変更した場合
defaultParaTest("changePara")

# 出力結果
# defalutPara
# changePara

5行目でパラメータ指定なしで関数起動すると、デフォルト引数の値となります。7行目でパラメータ値を指定して関数起動すると、引数で渡した値となります。

パラメータ全てに初期値を設定する場合(下記はパラメータ2つ) 
def   "関数名"" パラメータ名 " = " デフォルト値 "  ,  "  パラメータ名  " = " デフォルト値 " ) :
        "関数で実行する処理"

・サンプルコード

def defaultParaTest( para1 = "defalutPara1" , para2 = "defalutPara2"):
    print( para1 + ' , '  +para2)

# defaultパラメータ設定を使用した場合
defaultParaTest()
# defaultパラメータ値を変更した場合
defaultParaTest("changePara1" , "changPara2")
# 一つだけdefaultパラメータを変更した場合
defaultParaTest("changePara1")

# 出力結果
# defalutPara1 , defalutPara2
# changePara1 , changPara2
# changePara1 , defalutPara2

5行目でパラメータ指定なしで関数起動すると、デフォルト引数の値となります。

7行目で両方のパラメータ値を指定して関数起動すると、引数で渡した値となります。

9行目でパラメータ値を一つ指定すると、第一パラメータとなることがわかります。

パラメータ二番目だけに初期値を設定する場合(下記はパラメータ2つ)
def   "関数名"" パラメータ名 "  ,  " パラメータ名 " =  " デフォルト値 ") :
        "関数で実行する処理"

・サンプルコード

def defaultParaTest( para1 , para2 = "defalutPara2"):
    print( para1 + ' , '  +para2)

# 第一パラメータ設定、第二パラメータはデフォルト引数
defaultParaTest("changePara1")
# 第一、第二パラメータ設定
defaultParaTest("changePara1","changePara2")

# 出力結果
# changePara1 , defalutPara2
# changePara1 , changePara2

5行目で第一パラメータ指定で関数起動すると、第一パラメータが設定され、第二パラメータがデフォルト引数になります。

7行目で両方のパラメータ値を指定して関数起動すると、引数で渡した値となります。

当然ながらこの場合は、第一パラメータの指定は必須です。設定しないとエラーとなります。

デフォルト引数ができない記述

複数のパラメータのうち一番目だけ初期値を設定する場合

下記ケースでは正常に実行されず、エラーとなります。

def   "関数名"" パラメータ名 " = " デフォルト値 " , " パラメータ名 " ) :
        "関数で実行する処理"

・サンプルコード

def defaultParaTest( para1 = "defaultPara1" , para2):
    print( para1 + ' , '  +para2)

# 出力結果
# SyntaxError: non-default argument follows default argument
複数のパラメータのうち一部だけ初期値を設定する場合

下記ケースは正常に実行されず、エラーとなります。

def   "関数名"" パラメータ名 " = " デフォルト値 " , " パラメータ名 " , " パラメータ名 " ) :
        "関数で実行する処理"

・サンプルコード

def defaultParaTest( para1 = "defaultPara1" , para2 ,  para3):
    print( para1 + ' , '  +para2 + ' , ' para3)

# 出力結果
# SyntaxError: non-default argument follows default argument
複数のパラメータのうち一部だけ初期値を設定する場合

下記ケースは正常に実行されず、エラーとなります。

def   "関数名"" パラメータ名 " = " デフォルト値 " , " パラメータ名 " , " パラメータ名 "= " デフォルト値 " ) :
        "関数で実行する処理"

・サンプルコード

def defaultParaTest( para1 = "defaultPara1" , para2 ,  para3 = "defaultPara3"):
    print( para1 + ' , '  +para2 + ' , ' para3)

# 出力結果
# SyntaxError: non-default argument follows default argument